mar*_*eth 4 postgresql last-modified database-backups
我们有一个丑陋的问题,错误地,平衡器将一些请求重定向到具有与生产非常相似的数据的测试实例,现在我知道在测试Postgres中记录的数据属于生产
有没有办法列出Postgres过去24小时内所有数据变化的表格?
Postgres版本是9.3,我有大约250个表.
首先考虑我的评论.
Postgres直到包括9.4本身不会记录插入或更新行时的时间戳.
行标题中有一些系统列可以帮助进行取证工作.如果表中没有其他任何内容发生,则行(ctid
)的物理顺序可以作为指示符.在简单的情况下,新行会在插入时附加到表的物理端,因此它ctid
指示最后插入的内容 - 直到表中的任何更改.Postgres可以随意重新排列行的物理顺序,例如VACUUM
.任何人都会UPDATE
写一个新的行版本,它可以改变物理位置.新版本不必位于表格的末尾.Postgres尝试在可能的情况下将新行版本保留在同一数据页面上(HOT更新)...
也就是说,这是一个简单的查询来获取给定表的物理上最后一行:
SELECT ctid, *
FROM big
ORDER BY ctid DESC
LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请联系dba.SE:
插入事务ID xmin
可能很有用:
如果您碰巧在事件发生前就有了备份测试数据库,那将会很有帮助.将旧状态恢复到测试数据库的单独模式并比较表...
通常,我会timestamptz
在插入行时和/或上次更新时为重要表添加一列或两列.那对你来说非常有用......
什么会也非常适合你:在与SQL SQL标准引入了"时间"的特点:2011.但是,这还没有在Postgres中实现.Postgres Wiki中
有一个页面.PGXN
还有一个非正式的扩展.我没有测试它,也不能说它有多远.
Postgres 9.5引入了一个记录提交时间戳的功能(如@Craig评论).
文件:
track_commit_timestamp
(bool
)记录事务的提交时间.此参数只能在
postgresql.conf
文件中或服务器命令行中设置.默认值为off
.
归档时间: |
|
查看次数: |
2931 次 |
最近记录: |