我需要跟踪 postgresql 数据库中数据的任何更改。数据库或任何脚本中是否有任何选项可以查看这些数据和 DML。
3 回答
对不起 - 我不知道。但我确实有一些不同的建议:
为涉及更新、删除、插入、更改表等的查询记录 /all/ 查询和 grep。警告:如果有大量查询并且日志与数据和/或 WAL 位于相同的 RAID 上,则可能会导致性能问题。不确定是否容易制作一些 100% 确定捕获所有修改语句的正则表达式。可能很难捕获回滚等。要记录所有内容,请将其添加到配置文件中:
log_min_duration_statement = 0
. 看看其他 log_* 配置变量也很正常。规则/触发方法(正如其他用户所暗示的那样) - 我相信它涉及为每个表编写规则 - 但它当然是可行的(如果你有很多的话,应该可以通过一些外部脚本创建规则表)。您还可以了解一下 slony 的工作原理 - slony 是一个基于触发器的复制系统,应该可以使用它来捕获数据库中的所有更改。
对数据库的所有更改最终都在 WAL 文件中,也许理论上可以从 WAL 中提取一些东西,但我怀疑这不切实际,除非你已经是一个熟练的 postgres 黑客......如果你是一个熟练的postgres 黑客,你可能一开始就不会问这个问题 ;-) (最终,WAL 可用于查看数据的变化率以及当天更新次数多于其他情况的时间等。它们也可用于从二进制备份复制和前滚)
您可以在代码中管理它(手动添加日志)或查看此页面以获取信息/规则示例以自动记录事物
http://www.postgresql.org/docs/current/static/rules-views.html
在 postgresql.conf 中设置 log_statement='all' 之间,您还可以使用 tablelog 来捕获旧数据。