postgresql – 如何列出过去24小时内所有数据表的变化?

我们有一个丑陋的问题,错误地,平衡器将一些请求重定向到具有与生产非常相似的数据的测试实例,现在我知道在测试Postgres中记录的数据属于生产

有没有办法列出Postgres过去24小时内所有数据变化的表格?

Postgres版本是9.3,我有大约250个表.

解决方法

First consider my comment.
Postgres直到包括9.4本身不会记录插入或更新行时的时间戳.

标题中有一些系统列可以帮助进行取证工作.如果表格中没有其他任何内容发生,则行(ctid)的物理顺序可以作为指示符.在简单的情况下,插入时会将新行附加到表的物理端,因此ctid指示最后插入的内容 – 直到表中的任何更改. Postgres可以随意重新排列行的物理顺序,例如使用VACUUM.任何UPDATE也会写一个新的行版本,它可以改变物理位置.新版本不必位于表格的末尾. Postgres尝试在可能的情况下将新行版本保留在同一数据页面上(HOT update)…

也就是说,这是一个简单的查询获取给定表的物理上最后一行:

SELECT ctid,*
FROM   big
ORDER  BY ctid DESC
LIMIT  10;

有关详细信息,请联系dba.SE:

> VACUUM returning disk space to operating system
> How do I decompose ctid into page and row numbers?

插入事务id xmin可能很有用:

> How to find out when data was inserted to Postgres?

如果您碰巧在事件发生前就有了备份测试数据库,那将会很有帮助.将旧状态恢复到测试数据库的单独模式并比较表…

通常,我会在插入行时和/或上次更新时为重要表添加一个或两个timestamptz列.那对你来说非常有用……

对你来说还有什么好处:“temporal” features introduced in the SQL standard with SQL:2011.但是在Postgres中还没有实现.
一个page in the Postgres Wiki.
还有一个非官方的extension on PGXN.我没有测试它,也不能说它有多远.

Postgres 9.5引入了一个记录提交时间戳的功能(如@Craig commented).
The documentation:

track_commit_timestamp (bool)

Record commit time of transactions. This parameter can only be set in
postgresql.conf file or on the server command line. The default value
is off.

And some functions to work with it.

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...