प्रत्येक डेटाबेस के लिए, $PGDATA/base . के अंतर्गत डेटाबेस-ओआईडी संख्या के साथ एक निर्देशिका बनाई जाती है OID's,OID_fsm,OID_vm, PG_VERSION के सेट के साथ प्रत्येक ऑब्जेक्ट के लिए फ़ाइलें (टेबल्स/इंडेक्स/व्यू/आदि,)।
डेटाबेस-स्तर पर किए गए परिवर्तनों के अनुसार प्रत्येक OID,OID_fsm,OID_vm, फ़ाइलें अपडेट की जाएंगी। हालाँकि, PG_VERSION फ़ाइल डेटाबेस में किए गए किसी भी परिवर्तन पर कभी भी अपडेट नहीं होगी। इसलिए, हम डेटाबेस निर्माण समय के रूप में PG_VERSION फ़ाइल के टाइमस्टैम्प का उपयोग करने जा रहे हैं। मुझे विश्वास है कि PG_VERSION टाइमस्टैम्प बदलने की संभावना होगी, लेकिन मुझे यकीन नहीं है कि यह परिवर्तन किस स्थिति में होगा।
PG_VERSION का टाइमस्टैम्प प्राप्त करने के लिए, मुझे कुछ ऐसा चाहिए जो PG इंस्टेंस-स्तर पर OS कमांड निष्पादित करे। इसलिए, मैंने अपने एक सहयोगी विभोर कुमार द्वारा बनाए गए pl/perlu फ़ंक्शन का उपयोग किया।
http://vibhork.blogspot.com/2011/04/plperl-functions-for-getting-number-of.html
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;
और, डेटाबेस oid प्राप्त करने के लिए एक फ़ंक्शन।
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';
आउटपुट:
=# 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)
अधिक सामान के साथ वापस आऊंगा :)। यदि कोई हो तो अपनी टिप्पणी पोस्ट करें, उनकी अत्यधिक सराहना की जाएगी।