sql - Postgres : checking value before conditionally running an update or delete

标签 sql postgresql

我有一个相当简单的表格,它将记录的作者存储在一个文本字段中,如下所示:

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/

相关文章:

postgresql - 这个 Postgres 函数怎么会死锁?

mysql - SELECT FOR UPDATE 实际上是如何工作的?

python - 返回矩形内的点列表

sql - 改变 Postgres 序列的最小值

php - 将 Highcharts 与 mysql 一起用于页面访问

ruby-on-rails - 如果我在我的 Rails 测试套件中将 Postgres 换成 SQLite,它会导致问题吗?

sql - 在 SQL GROUP BY 中聚合集合中的不同值

postgresql - PostgreSQL 中第 n 行的 p 分位数

linux - Ubuntu Postgres 开始拒绝连接

sql - 如何从子查询返回多个字段的数组