Sidenote / DISCLAIMER:
Đây là một ý tưởng tồi, vì thời gian tạo bảng, điều này không đáng tin cậy 100%, vì bảng có thể đã bị xóa nội bộ và được tạo lại do các thao tác trên bảng, chẳng hạn như CLUSTER.
Ngoài ra, bạn có thể có thời gian tạo như thế này (giả sử tên-bảng-tên của 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')
Bí quyết là sử dụng pg_stat_file trên tệp bảng tương ứng.
-- 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('.');
Theo nhận xét trong bài đăng này PostgreSQL:Thời gian tạo bảng điều này không đáng tin cậy 100% vì bảng có thể đã bị xóa nội bộ và được tạo lại do các hoạt động trên bảng, chẳng hạn như CLUSTER.
Cũng là mẫu
/main/base/<database id>/<table filenode id>
có vẻ như là sai, như trên máy của tôi, tất cả các bảng từ các cơ sở dữ liệu khác nhau có cùng một id cơ sở dữ liệu và có vẻ như thư mục đã được thay thế bằng một số inode tùy ý, vì vậy bạn cần tìm thư mục có số gần nhất với bảng của bạn id inode (tên thư mục tối đa trong đó folderid <=table_inode_id và tên thư mục là số)
Phiên bản đơn giản hóa như sau:
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')
)
Sau đó, bạn có thể sử dụng information_schema và cte để làm cho truy vấn đơn giản hoặc tạo chế độ xem của riêng bạn:
;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
(tất cả các bảng được tạo bằng lược đồ nhibernate đều tạo, vì vậy thời gian giống nhau nhiều hơn hoặc ít hơn trên tất cả các bảng trên ảnh chụp màn hình là chính xác).
Đối với rủi ro và tác dụng phụ, hãy sử dụng não của bạn và / hoặc hỏi bác sĩ hoặc dược sĩ của bạn;)