postgresql information_schemaのすべてのテーブルを一覧表示します


200

PostgreSQLのinformation_schema内のすべてのテーブルを一覧表示する最良の方法は何ですか?

明確にするために:私は空のDBを使用しています(自分のテーブルを追加していません)が、information_schema構造体のすべてのテーブルを表示したいと思います。

回答:


276

select * from information_schema.tables特定のデータベースについてPostgresによって管理されているすべてのテーブルのリストを取得するために実行できるはずです。

を追加しwhere table_schema = 'information_schema'て、情報スキーマのテーブルのみを表示することもできます。


4
おかげで、私は試してみました:/ dt(アスタリスク)(アスタリスク)違いますか?
littleK

/ dt(アスタリスク)について何も知りません。(アスタリスク)申し訳ありません。postgresで選択クエリを実行したところ、その中のすべてのテーブルに関する情報がリストされました。(空のdbで)selectステートメントを実行して、返される結果を確認してください。
RodeoClown、2010

上記のコマンドを実行すると、以下のテーブルがinformation_schemaにリストされます:sql_features、sql_implementation_info、sql_languages、sql_packages、sql_parts、sql_sizing、sql_sizing_profiles .....これらのテーブルとinformation_schema.tablesのテーブルの違いは何ですか?
littleK

2
(/ dtコマンドを使用して)リストしたすべてのテーブルは、データベースに関するメタ情報を提供します。リストされている各表は、異なる情報を示しています。したがって、たとえば、information_schema.tablesテーブルには、データベース内のすべてのテーブルとその属性がリストされます(テーブルかビューか、名前とは何か、その他の情報などを確認できます)。information_schema.sql_featuresテーブルには、データベースで有効になっている機能が表示されます(データベースに埋め込まれたCと直接SQLがサポートされていることがわかります)。
RodeoClown、2010

1
dtコマンドで一覧表示された各テーブルでselect *を実行できます。これは、データベースのメタデータを含むテーブルのリストを表示したところです。
RodeoClown、2010

112

テーブルをリストするには、以下を使用します。

SELECT table_name FROM information_schema.tables WHERE table_schema='public'

作成したテーブルのみがリストされます。


作成していないが、アクセス権限があるテーブルはどうですか?
2013年

4
これは、パブリックスキーマのテーブルのみを表示します。他のスキーマでテーブルを作成できます。
Joe Van Dyk 2013

また、これはテーブルとビューを区別しません。
jayarjo

44
\dt information_schema.

psql内からは問題ありません。


14

「\ Z」コマンドはまた、対話型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)

1
これはpublic以外のスキーマのテーブルをリストしません。
ケニーエビット2018

10

あなたも使用できます

select * from pg_tables where schemaname = 'information_schema'

一般に、pg *テーブルを使用すると、アクセス許可に制約されずに、データベース内のすべてを表示できます(もちろん、テーブルにアクセスできる場合)。


9

'xxx'postgresqlのプライベートスキーマの場合:

SELECT table_name FROM information_schema.tables 
 WHERE table_schema = 'xxx' AND table_type = 'BASE TABLE'

なしではtable_type = 'BASE TABLE'、テーブルとビューをリストします


8

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'

table_typeでフィルタリングしないと、テーブルやビューなど、あらゆる種類のオブジェクトが混在してしまいます。
russellhoff

正確にwhere table_schema not in ('information_schema', 'pg_catalog')は何ですか?
jayarjo

1

すばやくダーティなワンライナークエリが必要な場合:

select * from information_schema.tables

psqlを開かなくても、クエリツールで直接実行できます。

(他の投稿では、より具体的なinformation_schemaクエリを提案していますが、初心者として、この1行のクエリがテーブルを理解するのに役立つことがわかりました)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.