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