小编Evg*_*rev的帖子

如何从 PostgreSQL 中的触发器访问其他 INSERTed/UPDATEd 行?

MS SQL 中的解决方案

MS SQL触发功能具有deletedinserted在其中受操作的所有行存储系统表。您可以计算更新的行数:

set @updatedCount = (select count(*) from deleted)
Run Code Online (Sandbox Code Playgroud)

或找出最小值:

set @updatedMinimumCol1 = (select min(col1) from deleted)
Run Code Online (Sandbox Code Playgroud)

PostgreSQL 的问题

对于FOR EACH ROW触发器,我可以使用 OLD 和 NEW 系统记录,但它们每次调用触发器只存储 1 行。触发器的调用是分开的,所以如果用户更新 10 行,触发器将被调用 10 次,但每次我只能知道 1 个当前行,而不是所有 10 行。

因为FOR EACH STATEMENT我根本不知道任何访问更新行的机制。我使用 PostgreSQL v9.6OLD TABLENEW TABLE在 v10 中引入。

PostgreSQL 不允许在语句级触发器中引用旧表和新表,即包含所有旧行和/或新行的表,这些表由 SQL 标准中的 OLD TABLE 和 NEW TABLE 子句引用。


尝试使用 transaction_timestamp() 附加列

我可以DEFAULT transaction_timestamp()向主表添加特殊列,然后使用它来区分刚刚更新的行与其他行,但这不是解决方案,因为多个INSERTs/UPDATEs …

postgresql trigger postgresql-9.6

3
推荐指数
1
解决办法
8728
查看次数

标签 统计

postgresql ×1

postgresql-9.6 ×1

trigger ×1