我想在POSTGRESQL中获取数据库创建日期。
我的版本是在Ubuntu 14.04上运行的9.3.4。
我可以使用select
语句执行此操作,还是可以通过访问服务器来执行此操作?
答案 0 :(得分:29)
我完全赞同Craig Ringer(出色的答案!)......但就我的目的而言,这已经足够了:
SELECT (pg_stat_file('base/'||oid ||'/PG_VERSION')).modification, datname FROM pg_database;
简单干净(但超级用户)。
答案 1 :(得分:6)
系统中没有PostgreSQL数据库创建时间的内置记录。所有依赖文件系统创建/修改时间的方法都会产生错误的答案。
例如,如果pg_basebackup
副本节点然后故障转移到它,则创建时间将显示为副本的创建时间。 pg_basebackup
不会保留文件创建/修改时间,因为它们通常不被认为与数据库系统的操作相关。
获得数据库创建时间的唯一可靠方法是在创建数据库时创建一个包含创建时间的1行表,然后设置权限/添加触发器以拒绝更新。
如果您不记得错误答案的风险,其中创建时间被报告为比实际情况更新,您可以查看base/[dboid]/PG_VERSION
文件的时间戳。 @Bob showed a useful way to do that。
答案 2 :(得分:0)
另一种解决方案:
postgres=# select oid,datname from pg_database where datname='bars_paidserv';
-[ RECORD 1 ]----------
oid | 5137290
datname | bars_paidserv
show data_directory
找到您的目录):cd /var/lib/postgresql/9.6/main/base
postgres@test-rp:~/9.6/main/base$ ls -l 5137290/PG_VERSION
-rw------- 1 postgres postgres 4 Jan 29 12:34 5137290/PG_VERSION
即我的数据库 bars_paidserv 的 OID 5137290 是在 1 月 29 日创建的。