PostgreSQLスキーマのテーブルを一覧表示する


329

\dtpsqlでaを実行すると、現在のスキーマ(publicデフォルト)のテーブルのリストのみが表示されます。

すべてのスキーマまたは特定のスキーマのすべてのテーブルのリストを取得するにはどうすればよいですか?

回答:


505

すべてのスキーマで:

=> \dt *.*

特定のスキーマでは:

=> \dt public.*

いくつかの制限付きで正規表現を使用することが可能です

\dt (public|s).(s|t)
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 public | s    | table | cpn
 public | t    | table | cpn
 s      | t    | table | cpn

上級ユーザーは、[0-9]などの文字クラスなどの正規表現表記を使用して、任意の数字を照合できます。すべての正規表現の特殊文字.は、上記のように区切り文字として*解釈され、正規表現表記.*?変換され.、に変換され、$文字どおりに一致する場合を除いて、9.7.3で指定されたとおりに機能します。?for .(R+|)for R*、または(R|)forをパターンに自動的に追加することで、必要に応じてこれらのパターン文字をエミュレートできます)。書くR?$正規表現の通常の解釈とは異なり、パターンは名前全体と一致する必要があるため、正規表現文字としては必要ありません(つまり、$*パターンを固定したくない場合は、開始時と終了時の両方または一方。二重引用符内では、すべての正規表現の特殊文字は特別な意味を失い、文字どおりに一致します。また、正規表現の特殊文字は、演算子名パターン(つまり、の引数\do)で文字どおり一致します。


6
単純に\dtと同等\dt public.*です、そうですか?
Frozen Flame

たとえば、特定のスキーマ内の2つの特定のテーブルについてはどうでしょうか。好き\dt public.user_info, public.user_scope
James M. Lay、

\dt public.a; \dt public.b;にしないでください。1行で行う方が簡単です。
James M. Lay、

\ dtは唯一の「公共」のテーブルを与えた場合には、一つは...正規表現を経由してより多くのものを期待していない..一種の暗黙的なのである
メフメト

1
@FrozenFlame違います!デフォルトでは、にあるものをすべて表示search_pathデフォルトは"$user", public.*です。したがって、set search_path=s; \dtはスキーマ内のすべてのテーブルをリストしますs
Lukas Juhrich、

258

からテーブルを選択できます information_schema

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

7
インターフェースがショートカットをサポートしていない場合に非常に役立ちます。ありがとう。
Matt Bannert、2014年

1
これは、select table_schema、table_name from information_schema.tables where table_name like '%whatever%'; テーブルがどのスキーマにあるかを知る必要がある場合。\ dt
Josh Brown

2
ありがとうございます。AmazonRedshiftでは機能しますが、\ dt(承認された回答)では機能しません。
Carlos2W 2015年

2
これが最も一般的に役立つ答えです。information_schemaはSQL標準で定義されており、準拠するほとんどのデータベースで利用できます
Davos

54

代わりにinformation_schemaそれを使用することが可能pg_tablesです:

select * from pg_tables where schemaname='public';

3
あなただけしたい場合、テーブル名は、それが結果として、クエリであることに注意してくださいSELECT tablename FROM pg_tables WHERE schemaname = 'public';
グラントハンフリーズは、

スキーマinformation_schemaからアイテムを一覧表示しないというアクセス許可の問題が見つかりましたpublicが、pg_tablesメソッドは適切に機能しました。どうもありがとう!
John Crawford

8

将来これに遭遇する人のために:

複数のスキーマの関係のリストを表示したい場合:

$psql mydatabase
mydatabase=# SET search_path TO public, usa;   #schema examples
SET
mydatabase=# \dt
              List of relations
 Schema |      Name       | Type  |  Owner
--------+-----------------+-------+----------
 public | counties        | table | postgres
 public | spatial_ref_sys | table | postgres
 public | states          | table | postgres
 public | us_cities       | table | postgres
 usa    | census2010      | table | postgres
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.