gpt4 book ai didi

postgresql - 使用 PostgreSQL 触发器对数据进行动态审计

转载 作者:搜寻专家 更新时间:2023-10-30 20:46:55 25 4
gpt4 key购买 nike

我有兴趣在现有的 PostgreSQL 数据库中使用以下审计机制。

http://wiki.postgresql.org/wiki/Audit_trigger

但是,想(如果可能的话)做一个修改。我还想记录 primary_key 的值,以便稍后查询。所以,我想在“logged_actions”表中添加一个名为“record_id”的字段。问题是现有数据库中的每个表都有不同的主键字段名。好消息是数据库有一个非常一致的命名约定。它总是,_id。因此,如果表名为“employee”,则主键为“employee_id”。

有没有办法做到这一点?基本上,我需要像 OLD.FieldByName(x) 或 OLD[x] 这样的东西来从 id 字段中获取值以放入新审计记录中的 record_id 字段。

我知道我可以为每个我想跟踪的表创建一个单独的自定义触发器,但最好是通用的。

编辑:我也知道键值确实记录在旧/新数据字段中。但是,我想要的是让历史查询更容易、更高效。换句话说,

select * from audit.logged_actions where table_name = 'xxxx' and record_id = 12345;

另一个编辑:我正在使用 PostgreSQL 9.1

谢谢!

最佳答案

您没有提到您的 PostgreSQL 版本,这在编写此类问题的答案时非常重要。

如果您正在运行 PostgreSQL 9.0 或更新版本(或能够升级),您可以使用 Pavel 记录的这种方法:

http://okbob.blogspot.com/2009/10/dynamic-access-to-record-fields-in.html

通常,您想要的是在记录类型的 PL/PgSQL 变量(如“NEW”或“OLD”)中引用动态命名的字段。这在历史上一直非常困难,并且仍然很尴尬,但至少在 9.0 中是可能的。

您的另一种选择(可能更简单)是在 plperlu 中编写您的审计触发器,其中动态字段引用是微不足道的。

关于postgresql - 使用 PostgreSQL 触发器对数据进行动态审计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58080280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com