gpt4 book ai didi

postgresql - 防止更新生成的主键列

转载 作者:行者123 更新时间:2023-11-29 13:19:00 40 4
gpt4 key购买 nike

在 PostgreSQL 中,我创建了一个表,其中的 id 列定义为 serial。我插入了两行,但我仍然可以更新 id 列的值。

但我需要防止更新 id 列的生成值。

create table aas.apa_testtable
(
id serial primary key,
name text
)

insert into aas.apa_testtable(name) select ('test')
insert into aas.apa_testtable(name) select ('test2')

-- I want this to be impossible / result in an error:
update aas.apa_testtable set id=3 where id=2

最佳答案

您可以撤销对表的更新并在列上授予它:

REVOKE UPDATE ON TABLE aas.apa_testtable FROM some_role;
GRANT UPDATE (name) ON TABLE aas.apa_testtable TO some_role;

记住您在设置中可能遇到的角色 public、 super 用户和其他继承问题。

--Do not try this, it will not work without revoking table level privileges:
REVOKE UPDATE (id) ON TABLE aas.apa_testtable FROM some_role;

另一种方法是创建触发器来检查旧的!= 新的,但提供的详细信息我认为不需要它。

关于postgresql - 防止更新生成的主键列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45004924/

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