web-dev-qa-db-ja.com

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

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

すべてのスキーマまたは特定のスキーマ内のすべてのテーブルのリストを取得する方法を教えてください。

265
Nyxynyx

すべてのスキーマで

=> \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で指定されたとおりに動作します。これは、上記のように区切り文字として扱われ、*は正規表現表記に変換されます。、に変換される?、および文字通りに一致する$。必要に応じて、これらのパターン文字をエミュレートできますか。の場合、(R + |)(Rの場合、または(R |)の場合R?。通常の正規表現の解釈とは異なり、パターンは名前全体と一致する必要があるため、$は正規表現文字としては必要ありません(つまり、$はパターンに自動的に追加されます)。パターンを固定したくない場合は、先頭または末尾に*を書きます。二重引用符内では、すべての正規表現の特殊文字は特殊な意味を失い、文字通りに一致します。また、正規表現の特殊文字は、演算子名のパターン(つまり、\ doの引数)で文字通りに一致します。

407
Clodoaldo Neto

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

SELECT * FROM information_schema.tables 
WHERE table_schema = 'public'
200
Jakub Kania

information_schemaの代わりにpg_tablesを使うことも可能です。

select * from pg_tables where schemaname='public';
41

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

いくつかのスキーマに対する関係のリストを見たい場合は、

$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
7
Blee