我有一个相当简单的表格,它将记录的作者存储在一个文本字段中,如下所示:
CREATE TABLE "public"."test_tbl" (
"index" SERIAL,
"testdate" DATE,
"pfr_author" TEXT DEFAULT "current_user"(),
CONSTRAINT "test_tbl_pkey" PRIMARY KEY("index");
用户永远不会看到 index 或 pfr_author 字段,但我希望他们能够更新 testdate 字段或删除整个记录,如果他们有权限并且他们是作者的话。即如果 test_tbl.pfr_author = CURRENT_USER 则允许更新或删除,但如果不允许则引发错误消息,例如“抱歉,您没有编辑此记录的权限。”。
我没有沿着使用触发器的路线走下去,因为我认为即使它在行更新之前执行,用户请求的更新仍然会在之后发生,无论如何。
我已经尝试通过规则来执行此操作,但由于我在规则中放置了更新命令,所以最终会出现无限递归。有没有办法单独使用规则或结合使用规则和触发器来做到这一点?
非常感谢您的帮助!
最佳答案
在 UPDATE 和 DELETE 上使用行级 BEFORE 触发器来执行此操作。当不允许操作时,让它返回NULL,操作将被跳过。
http://www.postgresql.org/docs/9.0/interactive/trigger-definition.html
关于sql - Postgres : checking value before conditionally running an update or delete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4025359/