सिडेनोट/अस्वीकरण:
यह एक बुरा विचार है, क्योंकि तालिका निर्माण समय यह 100% विश्वसनीय नहीं है, क्योंकि तालिका को आंतरिक रूप से छोड़ दिया गया हो सकता है और तालिका पर संचालन, जैसे CLUSTER के कारण फिर से बनाया गया हो।
इसके अलावा, आप इस तरह निर्माण समय प्राप्त कर सकते हैं (उदाहरण-तालिका-नाम t_benutzer
मानते हुए) ):
--select datname, datdba from pg_database;
--select relname, relfilenode from pg_class where relname ilike 't_benutzer';
-- (select relfilenode::text from pg_class where relname ilike 't_benutzer')
SELECT
pg_ls_dir
,
(
SELECT creation
FROM pg_stat_file('./base/'
||
(
SELECT
MAX(pg_ls_dir::bigint)::text
FROM pg_ls_dir('./base')
WHERE pg_ls_dir <> 'pgsql_tmp'
AND pg_ls_dir::bigint <= (SELECT relfilenode FROM pg_class WHERE relname ILIKE 't_benutzer')
)
|| '/' || pg_ls_dir
)
) as createtime
FROM pg_ls_dir(
'./base/' ||
(
SELECT
MAX(pg_ls_dir::bigint)::text
FROM pg_ls_dir('./base')
WHERE pg_ls_dir <> 'pgsql_tmp'
AND pg_ls_dir::bigint <= (SELECT relfilenode FROM pg_class WHERE relname ILIKE 't_benutzer')
)
)
WHERE pg_ls_dir = (SELECT relfilenode::text FROM pg_class WHERE relname ILIKE 't_benutzer')
रहस्य संबंधित तालिका फ़ाइल पर pg_stat_file का उपयोग करना है।
-- http://www.greenplumdba.com/greenplum-dba-faq/howtofindtablecreationdateingreenplum
select
pg_ls_dir
,
(
select
--size
--access
--modification
--change
creation
--isdir
from pg_stat_file(pg_ls_dir)
) as createtime
from pg_ls_dir('.');
इस पोस्ट में टिप्पणी के अनुसार PostgreSQL:टेबल निर्माण समय यह 100% विश्वसनीय नहीं है, क्योंकि तालिका को आंतरिक रूप से गिरा दिया गया है और तालिका पर संचालन, जैसे CLUSTER के कारण फिर से बनाया गया है।
साथ ही पैटर्न
/main/base/<database id>/<table filenode id>
गलत लगता है, जैसा कि मेरी मशीन पर है, विभिन्न डेटाबेस के सभी तालिकाओं में एक ही डेटाबेस आईडी है, और ऐसा लगता है कि फ़ोल्डर को कुछ मनमानी इनोड संख्या से बदल दिया गया है, इसलिए आपको उस फ़ोल्डर को खोजने की आवश्यकता है जिसका नंबर आपकी तालिका के सबसे करीब है इनोड आईडी (अधिकतम फ़ोल्डरनाम जहां फ़ोल्डर आईडी <=table_inode_id और फ़ोल्डरनाम संख्यात्मक है)
सरलीकृत संस्करण इस प्रकार है:
SELECT creation
FROM pg_stat_file(
'./base/'
||
(
SELECT
MAX(pg_ls_dir::bigint)::text
FROM pg_ls_dir('./base')
WHERE pg_ls_dir <> 'pgsql_tmp'
AND pg_ls_dir::bigint <= (SELECT relfilenode FROM pg_class WHERE relname ILIKE 't_benutzer')
)
|| '/' || (SELECT relfilenode::text FROM pg_class WHERE relname ILIKE 't_benutzer')
)
फिर आप क्वेरी को सरल बनाने के लिए info_schema और cte का उपयोग कर सकते हैं, या अपना स्वयं का दृश्य बना सकते हैं:
;WITH CTE AS
(
SELECT
table_name
,
(
SELECT
MAX(pg_ls_dir::bigint)::text
FROM pg_ls_dir('./base')
WHERE pg_ls_dir <> 'pgsql_tmp'
AND pg_ls_dir::bigint <= (SELECT relfilenode FROM pg_class WHERE relname ILIKE table_name)
) as folder
,(SELECT relfilenode FROM pg_class WHERE relname ILIKE table_name) filenode
FROM information_schema.tables
WHERE table_type = 'BASE TABLE'
AND table_schema = 'public'
)
SELECT
table_name
,(
SELECT creation
FROM pg_stat_file(
'./base/' || folder || '/' || filenode
)
) as creation_time
FROM CTE
(निबर्ननेट स्कीमा के साथ बनाई गई सभी तालिकाएँ, इसलिए स्क्रीनशॉट पर सभी तालिकाओं पर कमोबेश एक ही समय सही है)।
जोखिम और दुष्प्रभावों के लिए, अपने मस्तिष्क का उपयोग करें और/या अपने डॉक्टर या फार्मासिस्ट से पूछें;)