暂无图片
在postgreSQL 里面在哪个表记录了表的创建时间和修改时间?
我来答
分享
暂无图片 匿名用户
在postgreSQL 里面在哪个表记录了表的创建时间和修改时间?

在postgreSQL 里面在哪个表记录了表的创建时间和修改时间?

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
赵师的工作日

可以通过以下sql查询表的创建时间和修改时间

SELECT relname, relkind, relnamespace::regnamespace, relowner, reltuples, relpages, relsize, relcreationtime::timestamp, relmodificationtime::timestamp
FROM pg_class
WHERE relname = 'table_name';
暂无图片 评论
暂无图片 有用 2
清风生
2023-05-10
哪个版本?
赵师的工作日

目前所有版本

暂无图片 评论
暂无图片 有用 0
清风生

pg没有系统表视图记录表的创建时间,但可以通过其他额外的手段来判断表的创建时间。

通过pg日志

在表创建前,设置参数log_statement=ddl ,pg会在日志中记录所有ddl的语句操作,包括CREATE TABLE,这种方法是最准确靠谱的。
但问题是,如果表已经创建了很长时间,而pg没有保留那么长时间的日志,就只能通过其他手段来判断。

通过表数据文件的创建时间

psql中可以通过pg_stat_file() 函数可以查看数据文件的access、modification、change时间,但没有文件的创建时间。
OS命令stat | grep birth 可以查看数据文件的创建时间,但需要注意的是:vacuum full、cluster、truncate等命令会重写表,所以会改变数据文件的创建时间。 这种情况可以通过业务方面去判断,比如通过查看同一批同时创建的表的数据文件创建时间来对比。

  1. ext4文件系统通过stat可以查看文件的birth时间, 如果为空可以通过命令sudo debugfs -R 'stat filename' DEVICE 查看,例如,sudo debugfs -R "stat '/data/postgres/13/data/base/13580/41034'" /dev/mapper/vol_slta340ispl_01-volume
  2. 如果是xfs文件系统,stat命令查看时birth时间也可能为空,可以通过命令sudo xfs_db -r -c "inode $(stat -c %i /data/postgres/13/data/base/13580/41034)" -c "p v3.crtime.sec" /dev/mapper/vol_slta340ispl_01-volume 查看
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏