如何防止现有行/记录的更新但允许使用 PostgreSQL 触发器插入?

dsn*_*guy 4 postgresql trigger

如何防止给定表中任何记录的更新,但允许插入,我已经创建了一个阻止更新的触发器,但我发现它也阻止插入。

编辑
我可以从数据库本身插入新行/记录,但不能从连接到该数据库的应用程序的新记录的表单中插入新行/记录,提交表单后,正在执行触发器。

它是一个使用 Django 构建的 Web 应用程序。

触发功能

CREATE OR REPLACE FUNCTION prevent_updte()
RETURNS trigger AS
$BODY$
BEGIN
RAISE EXCEPTION 'Data modification not allowed';
END;
$BODY$
LANGUAGE plpgsql
Run Code Online (Sandbox Code Playgroud)

扳机

CREATE Trigger prevent_update
BEFORE UPDATE ON purchases_purchase
FOR EACH ROW
EXECUTE PROCEDURE prevent_update();
Run Code Online (Sandbox Code Playgroud)

McN*_*ets 7

您可以使用GRANT & REVOKE来实现此目的:

 CREATE TABLE TEST (ID int, NAME text);

 REVOKE ALL ON TABLE TEST FROM CURRENT_USER;

 GRANT INSERT ON TABLE TEST TO CURRENT_USER;
 GRANT SELECT ON TABLE TEST TO CURRENT_USER;
Run Code Online (Sandbox Code Playgroud)
 INSERT INTO TEST VALUES (1, 'NAME 1'),(2, 'NAME 2');
Run Code Online (Sandbox Code Playgroud)
UPDATE TEST SET NAME='NAME 3' WHERE ID = 1;
ERROR:  permission denied for table test
Run Code Online (Sandbox Code Playgroud)

db<>在这里摆弄