在PostgreSQL上获取数据库创建日期

时间:2014-07-17 14:19:02

标签: database postgresql

我想在POSTGRESQL中获取数据库创建日期。 我的版本是在Ubuntu 14.04上运行的9.3.4。 我可以使用select语句执行此操作,还是可以通过访问服务器来执行此操作?

3 个答案:

答案 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)

另一种解决方案:

  1. 查找数据库 OID:
<块引用>
postgres=# select oid,datname from pg_database where datname='bars_paidserv';
-[ RECORD 1 ]----------
oid     | 5137290
datname | bars_paidserv
  1. 转到数据库 datatfiles(您可以通过执行 show data_directory 找到您的目录):
<块引用>

cd /var/lib/postgresql/9.6/main/base

  1. 在您的 OID 中列出 PG_VERSION 文件:
<块引用>
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 日创建的。