在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')
update aas.apa_testtable set id=3 where id=2
答案 0 :(得分:1)
您可以撤消对表的更新并将其授予列:
REVOKE UPDATE ON TABLE aas.apa_testtable FROM some_role;
GRANT UPDATE (name) ON TABLE aas.apa_testtable TO some_role;
请记住您在设置中可能遇到的角色public
,超级用户和其他继承问题。
--Do not try this, it will not work without revoking table level privileges:
REVOKE UPDATE (id) ON TABLE aas.apa_testtable FROM some_role;
替代方法是创建触发器,检查是否旧!=新,但提供详细信息我不认为需要它。