匿名用户在postgreSQL 里面在哪个表记录了表的创建时间和修改时间?
在postgreSQL 里面在哪个表记录了表的创建时间和修改时间?
我来答
添加附件
收藏
复制链接
微信扫码分享
在小程序上查看
分享
添加附件
问题补充
3条回答
默认
最新
可以通过以下sql查询表的创建时间和修改时间
SELECT relname, relkind, relnamespace::regnamespace, relowner, reltuples, relpages, relsize, relcreationtime::timestamp, relmodificationtime::timestamp
FROM pg_class
WHERE relname = 'table_name';
评论
有用 2pg没有系统表视图记录表的创建时间,但可以通过其他额外的手段来判断表的创建时间。
通过pg日志
在表创建前,设置参数log_statement=ddl ,pg会在日志中记录所有ddl的语句操作,包括CREATE TABLE,这种方法是最准确靠谱的。
但问题是,如果表已经创建了很长时间,而pg没有保留那么长时间的日志,就只能通过其他手段来判断。
通过表数据文件的创建时间
psql中可以通过pg_stat_file() 函数可以查看数据文件的access、modification、change时间,但没有文件的创建时间。
OS命令stat | grep birth 可以查看数据文件的创建时间,但需要注意的是:vacuum full、cluster、truncate等命令会重写表,所以会改变数据文件的创建时间。 这种情况可以通过业务方面去判断,比如通过查看同一批同时创建的表的数据文件创建时间来对比。
- 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- 如果是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回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏

