有没有办法列出Postgres过去24小时内所有数据变化的表格?
Postgres版本是9.3,我有大约250个表.
解决方法
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
isoff
.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。