我想向 PG 添加一些审计触发器,以记录对表的所有更改。我找到了一个示例触发器(wiki.postgresql.com - 9.1+ 审计触发器),它让我开始了。
我想要做的是自动传递一些附加数据,例如 theuser-id
或 other 键,以便触发器可以将更改链接回进行更改的应用程序用户。基本流程如下:
set conn_context = {userid};
)使用 MS SQL 时,我能够通过执行SET CONTEXT_INFO ...data...
. 我希望有一种方法可以为 PG 做到这一点;我还没有找到,但这可能是糟糕的 google-fu。
我正在使用较旧的架构,但不明白为什么我的删除操作(清除孤立记录)在某些情况下无法按预期工作。在其他情况下,两个查询都返回相同的结果:-/
例如,我有 3 个模型:房屋、办公室和地址。 house
并且office
两者都有对 an 的可为空引用address.id
,因此address
记录可以属于它们中的任何一个,但地址本身并不指示哪个。
-- query 1
DELETE FROM address adr
WHERE
NOT EXISTS(SELECT * FROM house H WHERE H.address_id = adr.id) AND
NOT EXISTS(SELECT * FROM office O WHERE O.address_id = adr.id);
-- query 2
DELETE FROM address adr
WHERE
NOT adr.id IN (select address_id from house) AND
NOT adr.id IN (select address_id from office);
Run Code Online (Sandbox Code Playgroud)
查询 1:删除 3000 条记录(正确)
查询 2:删除 0 条记录
查询#2 的明显问题是什么?当我检查 #1 删除的记录时,它们确实不存在于 …