跟踪数据库更改的脚本

时间:2012-06-13 08:30:55

标签: postgresql

我需要跟踪postgresql数据库中的任何数据更改。数据库或任何脚本中是否有任何选项可以查看这些数据和DML。

3 个答案:

答案 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来捕获旧数据。