gpt4 book ai didi

PostgreSQL:只读表

转载 作者:行者123 更新时间:2023-11-29 14:05:41 24 4
gpt4 key购买 nike

我的问题与此有关:how to lock a table for writing

我找到了简单的解决方案,但我不确定它对副作用是否安全。

所以:

update pg_class set relkind = 'm' where relname = '<table_name>';

(考虑到表模式肯定会更复杂)

然而在我的简单测试中它成功了:

create table t(i int); insert into t values(1);
update pg_class set relkind = 'm' where relname = 't';
insert into t values(1);
-- ERROR: cannot change materialized view "t"
select * from t;
-- i
-- ---
-- 1
-- (1 row)

因此,我的问题(目前完全是理论上的)是:此解决方案是否会出现问题?

最佳答案

是的,事情可能会出错。

Postgres 永远不会允许这种状态通过 DDL 命令,它的行为现在基本上是未定义的。

一方面,每个物化 View 都应该有一个关联的定义,因此 pg_dump 现在崩溃了,提示 View “t”的 定义似乎是空的(长度为零)

您的“物化 View ”也可能具有列默认值、约束、触发器和许多其他通过 DDL 永远不允许的东西,这可能会导致它们自己的一系列问题。

如果你想让一个表只读,设置适当的permissions , 或拒绝 trigger 中的任何更改.

关于PostgreSQL:只读表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58456874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com