小编And*_*rew的帖子

在连接中传递附加数据以供 PGSQL 触发器使用

我想向 PG 添加一些审计触发器,以记录对表的所有更改。我找到了一个示例触发器(wiki.postgresql.com - 9.1+ 审计触发器),它让我开始了。

我想要做的是自动传递一些附加数据,例如 theuser-id或 other 键,以便触发器可以将更改链接回进行更改的应用程序用户。基本流程如下:

  • 获取当前请求的连接
  • 运行自定义 SQL 以设置上下文变量 ( set conn_context = {userid};)
  • 读取/解析触发器内的变量
  • 将值与其他信息一起写入日志表

使用 MS SQL 时,我能够通过执行SET CONTEXT_INFO ...data.... 我希望有一种方法可以为 PG 做到这一点;我还没有找到,但这可能是糟糕的 google-fu。

postgresql trigger

6
推荐指数
1
解决办法
772
查看次数

使用 NOT EXISTS 和 NOT IN 删除会产生不同的结果

我正在使用较旧的架构,但不明白为什么我的删除操作(清除孤立记录)在某些情况下无法按预期工作。在其他情况下,两个查询都返回相同的结果:-/

例如,我有 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 删除的记录时,它们确实不存在于 …

postgresql

4
推荐指数
1
解决办法
9410
查看次数

标签 统计

postgresql ×2

trigger ×1