[作者:技術者高健@博客園 mail: luckyjackgao@gmail.com ]
這個也是從 oid2name 中扒出來的:
[postgres@localhost bin]$ ./oid2name -d postgres From database "postgres": now: SELECT pg_catalog.pg_relation_filenode(c.oid) as "Filenode", relname as "Table Name" FROM pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace LEFT JOIN pg_catalog.pg_database d ON d.datname = pg_catalog.current_database(),pg_catalog.pg_tablespace t WHERE relkind IN ('r') AND n.nspname NOT IN ('pg_catalog', 'information_schema') AND n.nspname !~ '^pg_toast' AND t.oid = CASE WHEN reltablespace <> 0 THEN reltablespace ELSE dattablespace END ORDER BY relname Filenode Table Name ---------------------- 24608 gaotab 24604 testtab [postgres@localhost bin]$
執行結果就是這樣,這里沒有用我給出的 postgres 數據庫名 ,而是用了 pg_catalog.current_database()
我把格式整理一下,並且把數據庫名換成我想要的 ’postgres‘,當然,如果有其他數據庫,換其他的名字就可以了。
SELECT pg_catalog.pg_relation_filenode(c.oid) as "Filenode", relname as "Table Name" FROM pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace LEFT JOIN pg_catalog.pg_database d ON d.datname = 'postgres', pg_catalog.pg_tablespace t WHERE relkind IN ('r') AND n.nspname NOT IN ('pg_catalog', 'information_schema') AND n.nspname !~ '^pg_toast' AND t.oid = CASE WHEN reltablespace <> 0 THEN reltablespace ELSE dattablespace END ORDER BY relname
其實 t 是沒有必要的,還可以再簡化:
SELECT pg_catalog.pg_relation_filenode(c.oid) as "Filenode", relname as "Table Name" FROM pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace LEFT JOIN pg_catalog.pg_database d ON d.datname = 'postgres' WHERE relkind IN ('r') AND n.nspname NOT IN ('pg_catalog', 'information_schema') AND n.nspname !~ '^pg_toast' ORDER BY relname
[作者:技術者高健@博客園 mail: luckyjackgao@gmail.com ]