PostgreSQLのinformation_schema内のすべてのテーブルをリストする最良の方法は何ですか?
明確にするために、空のDBを使用しています(独自のテーブルは追加していません)が、information_schema構造内のすべてのテーブルを表示したいです。
特定のデータベースのPostgresで管理されているすべてのテーブルのリストを取得するには、select * from information_schema.tables
を実行するだけです。
where table_schema = 'information_schema'
を追加して、情報スキーマ内のテーブルのみを表示することもできます。
テーブルをリストするには、次を使用します。
SELECT table_name FROM information_schema.tables WHERE table_schema='public'
作成したテーブルのみがリストされます。
\dt information_schema.
psql内から、問題ないはずです。
"\ z" COMMANDは、インタラクティブpsqlセッション内でテーブルをリストする良い方法でもあります。
例えば。
# psql -d mcdb -U admin -p 5555
mcdb=# /z
Access privileges for database "mcdb"
Schema | Name | Type | Access privileges
--------+--------------------------------+----------+---------------------------------------
public | activities | table |
public | activities_id_seq | sequence |
public | activities_users_mapping | table |
[..]
public | v_schedules_2 | view | {admin=arwdxt/admin,viewuser=r/admin}
public | v_systems | view |
public | vapp_backups | table |
public | vm_client | table |
public | vm_datastore | table |
public | vmentity_hle_map | table |
(148 rows)
また使用してもよい
select * from pg_tables where schemaname = 'information_schema'
一般に、pg *テーブルを使用すると、データベースのすべてを見ることができ、権限に制約されることはありません(もちろん、テーブルにアクセスできる場合)。
Postgresqlのプライベートスキーマ'xxx'
の場合:
SELECT table_name FROM information_schema.tables
WHERE table_schema = 'xxx' AND table_type = 'BASE TABLE'
table_type = 'BASE TABLE'
がなければ、テーブルとviewsをリストします
1. information_schema.tablesからすべてのテーブルとビューを取得し、information_schemaとpg_catalogのものを含めます。
select * from information_schema.tables
2.特定のスキーマに属するテーブルとビューを取得する
select * from information_schema.tables
where table_schema not in ('information_schema', 'pg_catalog')
3.テーブルのみを取得する(ほぼ\ dt)
select * from information_schema.tables
where table_schema not in ('information_schema', 'pg_catalog') and
table_type = 'BASE TABLE'
迅速でダーティなワンライナークエリが必要な場合:
select * from information_schema.tables
Psqlを開かなくても、クエリツールで直接実行できます。
(他の記事では、より具体的なinformation_schemaクエリをニースしていますが、初心者として、この1行のクエリは、テーブルを把握するのに役立ちます)