すべてのテーブル名をリストするPostgreSQLクエリ?


184

Postgres DB内のすべてのテーブルを一覧表示するために使用できるクエリはありますか?

私は次のようなクエリを試しました:

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

ただし、このクエリはビューも返します。

ビューではなくテーブル名のみを取得するにはどうすればよいですか?

回答:


307

何(の記述に基づいて、このクエリ試合マニュアル)?

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

4
これがここでの最良の答えです。
トミー

3
テーブルタイプとは
ブライアンブライス2018

マニュアルのtable_type:テーブルのタイプ:永続ベーステーブル(通常のテーブルタイプ)のBASE TABLE、ビューのVIEW、外部テーブルのFOREIGN、または一時テーブルのLOCAL TEMPORARY
tzachs

38

データベースのリストが必要な場合

SELECT datname FROM pg_database WHERE datistemplate = false;

すべてのデータベースの現在のpgインストールからのテーブルのリストが必要な場合

SELECT table_schema,table_name FROM information_schema.tables
ORDER BY table_schema,table_name;

少なくともPostgres 9.5では、そうではありません。1つのクラスターに3つのデータベースがあり、これは現在のデータベースからテーブルを返すだけです。
sudo

ドキュメントは現在のものだけを述べています:postgresql.org/docs/9.5/static/infoschema-tables.html "table_catalog sql_identifierテーブルを含むデータベースの名前(常に現在のデータベース)"
sudo

28

必要なデータベースを使用してpostgresターミナルを開きます。

psql dbname (run this line in a terminal)

次に、このコマンドをpostgres環境で実行します

\d

これはすべてのテーブルを名前で説明します。基本的に名前の昇順によるテーブルのリスト。

次に、これを試して、フィールドごとにテーブルを記述できます。

\d tablename.

お役に立てれば。


@wingedpantherどうやって?すべてのテーブルのみ\dをリストするオプション があり、インデックスもシーケンスもありません...?
Peter Krauss、2015

5
これはあり\dtませんか?
thoroc

11

これを試して:

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

これはうまくいきます!


必要ないと思うtable_type='BASE TABLE'。多分私は間違っています、詳しく説明していただけませんか?
-abriggs

現在接続されているDBをフィルタリングするのに役立つ場合があります:and table_catalog = current_database()
Diego Scaravaggi

8
select 
 relname as table 
from 
 pg_stat_user_tables 
where schemaname = 'public'
  • track_activitiesが無効になっている場合、これは機能しません

select 
  tablename as table 
from 
  pg_tables  
where schemaname = 'public'

1
pg_stat_user_tablesが無効になっていると、データtrack_activitiesが入力されない可能性があります。などの「公式」APIを使用したpg_tablesか、information_schema.tableであるずっと良い選択。
a_horse_with_no_name 2014年


0
SELECT table_name
FROM information_schema.tables
WHERE table_type='BASE TABLE'
AND table_schema='public';

MySQLの場合はtable_schema = 'dbName'が必要であり、MSSQLの場合はその条件を削除します。

「現在のユーザーがアクセスできるのは、それらのテーブルとビューだけが表示されている」ことに注意してください。また、多くのデータベースにアクセスしていて、結果を特定のデータベースに制限したい場合は、条件AND table_catalog = 'yourDatabase'(PostgreSQLの場合)を追加することで実現できます。

行名を示すヘッダーと行数を示すフッターも削除したい場合は、コマンドラインオプション-t(--tuples-onlyの略)でpsqlを起動するか、psqlの設定を切り替えることができます。 \ tによるコマンドライン(\ pset tuples_onlyの省略形)。これは、たとえば、\ g [| command]を使用して出力を別のコマンドにパイプする場合に役立ちます。

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