加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL中最新的表修改时间

发布时间:2020-12-13 18:05:04 所属栏目:百科 来源:网络整理
导读:我需要得到一个表的最新修改时间,所以遇到了 select relfilenode from pg_class where relname = 'test'; 它给了我relfilenode id,这似乎是一个目录名 L:DatabasesPostgresSQLdatabaseinodenumber 我后来提取了最新的修改时间. 这是正确的方法,还是有更
我需要得到一个表的最新修改时间,所以遇到了
select relfilenode from pg_class where relname = 'test';

它给了我relfilenode id,这似乎是一个目录名

L:DatabasesPostgresSQLdatabaseinodenumber

我后来提取了最新的修改时间.

这是正确的方法,还是有更好的方法来做同样的事情

测试表的relfilenode的mtime将无法正常工作.正如Eelke所说,VACUUM和其他操作将修改时间戳.提示位设置也将修改表,使其看起来被SELECT“修改”.此外,有时一个表有一个以上的磁盘关系(1GB块),你必须检查所有它们以找到最新的.

如果要保留表的上次修改时间,请添加AFTER INSERT或UPDATE或DELETE OR TRUNCATE … FOR EACH STATEMENT触发器,用于更新用于跟踪修改时间的表中的时间戳行.

触发器的缺点是它会对桌面上的单行锁定进行竞争,因此它将序列化您的所有事务.它还会大大增加陷入僵局的可能性.你真正想要的可能是非事务性的东西,当事务发生时不需要回滚,如果多个事务更新计数器,则最高值获胜.没有内置的东西,尽管它可能不像C扩展那么难.

稍微复杂一点的选择是创建一个触发器,使uses dblink更新最后更新的计数器.这将避免大多数争用问题,但它实际上会使死锁更糟,因为PostgreSQL的死锁检测将无法“看到”两个会话通过中介死锁的事实.你需要一种方法来SELECT … FOR UPDATE超时,以使其可靠而不会过于频繁地中止事务.

但无论如何,触发器不会捕获DDL. DDL触发器(“事件触发器”)将在第9.3页中出现.

也可以看看:

> How do I find the last time that a PostgreSQL database has been updated?
> How to get ‘last modified time’ of the table in postgres?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读