Đối với mọi cơ sở dữ liệu, một thư mục được tạo với số cơ sở dữ liệu-oid dưới $ PGDATA / base cùng với một tập hợp OID, OID_fsm, OID_vm, PG_VERSION các tệp cho từng Đối tượng (Bảng / Chỉ mục / Chế độ xem / v.v.,).
Mọi tệp OID, OID_fsm, OID_vm, sẽ được cập nhật theo các thay đổi được thực hiện ở cấp cơ sở dữ liệu. Tuy nhiên, tệp PG_VERSION sẽ không bao giờ được cập nhật về bất kỳ thay đổi nào được thực hiện đối với cơ sở dữ liệu. Vì vậy, chúng tôi sẽ sử dụng dấu thời gian của tệp PG_VERSION làm thời gian tạo cơ sở dữ liệu. Tôi tin rằng sẽ có cơ hội thay đổi dấu thời gian PG_VERSION, nhưng tôi không chắc những thay đổi này xảy ra trong trường hợp nào.
Để lấy dấu thời gian của PG_VERSION, tôi cần một thứ gì đó thực thi lệnh OS ở cấp PG Instance. Vì vậy, tôi đã sử dụng hàm pl / perlu do một trong những đồng nghiệp của tôi là Vibhor Kumar tạo ra.
http://vibhork.blogspot.com/2011/04/plperl-functions-for-getting-number-of.html
Hàm pl / perlu
CREATE OR REPLACE FUNCTION execute_shell(text) returns setof text
as
$$
$output=`$_[0] 2>&1`;
@output=split(/[nr]+/,$output);
foreach $out (@output)
{ return_next($out);
}
return undef;
$$ language plperlu;
Và, một chức năng để lấy oid cơ sở dữ liệu.
CREATE OR REPLACE FUNCTION public.get_pg_version_loc(dbname varchar) RETURNS text AS
$body$
DECLARE
dbname ALIAS FOR $1;
data_dir text;
db_oid text;
os_execute text;
BEGIN
SELECT INTO db_oid oid from pg_database where datname = dbname;
show data_directory into data_dir;
os_execute := 'stat -c "%y" '||data_dir||'/base/'||db_oid||'/PG_VERSION';
return os_execute;
END;
$body$
LANGUAGE 'plpgsql';
Đầu ra:
=# select datname,execute_shell(get_pg_version_loc(datname::text)) as "DB_Createion_Time"
-# from pg_database where datname not in ('template0','template1');
datname | DB_Createion_Time
--------------+-------------------------------------
postgres | 2011-01-10 21:48:37.222016571 +0530
provider | 2011-05-26 11:40:14.253434477 +0530
pgbench_test | 2011-08-14 16:52:21.689198728 +0530
pgpool | 2011-08-26 12:30:19.864134713 +0530
(4 rows)
Sẽ trở lại với nhiều thứ hơn :). Hãy đăng bình luận của bạn nếu có, chúng sẽ được đánh giá cao.