sql - 如何在 postgres 中使用 'for statement' 触发器?

标签 sql postgresql

如果我们像下面这样编写一个 FOR STATEMENT 触发器,我们如何才能只访问触发器过程/函数中更新的行

CREATE FUNCTION func1()
RETURNS trigger AS $$
BEGIN
    --access only updated/inserted rows here???
    RETURN null;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trig1
AFTER UPDATE OR DELETE OR INSERT
ON tbl1 FOR STATEMENT
EXECUTE PROCEDURE func1();

我的意思是像下面这样多行更新一次

update tbl1 set col1=1 where col2 in (2,3,4,5,6)

最佳答案

现在,可以在第 10 页中使用插入记录表的标识符:

CREATE TRIGGER transfer_insert
AFTER INSERT ON transfer
REFERENCING NEW TABLE AS inserted
FOR EACH STATEMENT
EXECUTE PROCEDURE check_transfer_balances_to_zero();

摘自第 10 页文档:https://www.postgresql.org/docs/10/static/sql-createtrigger.html

关于sql - 如何在 postgres 中使用 'for statement' 触发器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22600996/

相关文章:

postgresql - 使用 Postgres 和 GO 强制执行 "lock"

postgresql - Docker似乎是在服务器上迁移数据库而不是在RDS上迁移

database - 酒保 PostgreSQL : FAILED

java - JDBC-ResultSet 在 while-Loop 中关闭

mysql - 在mysql中选择连续的记录 block

postgresql - 函数内部的动态查询 postgres 语句有什么问题?

php - 在 Codeigniter 的库中连接另一个数据库

SQL 内连接与前 1

mysql - SQL计算SELECT时的折扣

mysql - MySQL 中两个电子邮件地址的域和扩展名匹配吗?