Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 防止更新生成的主键列_Postgresql - Fatal编程技术网

Postgresql 防止更新生成的主键列

Postgresql 防止更新生成的主键列,postgresql,Postgresql,在PostgreSQL中,我创建了一个表,其id列定义为serial。我已经插入了两行,但仍然可以更新id列的值 但是我需要阻止id列的生成值的更新 您可以撤消表上的更新,并在列上授予更新: REVOKE UPDATE ON TABLE aas.apa_testtable FROM some_role; GRANT UPDATE (name) ON TABLE aas.apa_testtable TO some_role; 请记住有关角色公用、超级用户以及您的设置中可能存在的其他继承问题 --

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

但是我需要阻止id列的生成值的更新


您可以撤消表上的更新,并在列上授予更新:

REVOKE UPDATE ON TABLE aas.apa_testtable FROM some_role;
GRANT UPDATE (name) ON TABLE aas.apa_testtable TO some_role;
请记住有关角色公用、超级用户以及您的设置中可能存在的其他继承问题

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

另一种方法是创建触发器,该触发器将检查是否为旧的!=新增,但提供了详细信息,我认为没有必要使用它。

如果您不想更改id值,那么为什么要运行更新?我需要列为唯一列,标识列为静态列,这意味着插入后无法更改列。
--Do not try this, it will not work without revoking table level privileges:
REVOKE UPDATE (id) ON TABLE aas.apa_testtable FROM some_role;