PostgreSQLのすべてのスキーマを一覧表示するにはどうすればいいですか?


148

PostgreSQL v9.1を使用している場合、SQLを使用してすべてのスキーマを一覧表示する方法を教えてください。

私は次のことに沿って何かを期待していました:

SELECT something FROM pg_blah;
156

すべてのスキーマを一覧表示するには、(ANSI)標準のINFORMATION_SCHEMAを使用します。

select schema_name
from information_schema.schemata

マニュアルにさらに詳しい情報: http://www.postgresql.org/docs/current/static/information-schema.html

あるいは:

select nspname
from pg_catalog.pg_namespace;

マニュアル内のpg_catalogに関する詳細: http://www.postgresql.org/docs/current/static/catalogs.html


165

使用している場合psqlコマンドラインを、次のコマンドですべてのスキーマを一覧表示することがあり\dn

  0

ありがとう。スキーマだけで\ dnが返されるようにするとよいでしょうが、この場合はlibpq/libpqxxを使用して接続するブートストラップアプリを作成しているので、CLIにアクセスできません。 15 4月. 132013-04-15 20:03:56

+1

'\ dt'がリストするテーブルとは対照的に、' \ dn'がリストするスキーマは何ですか? 29 4月. 162016-04-29 15:29:19

  0

@Tommy '\ dt'はパブリックスキーマ用のテーブルを一覧表示します。すべてのスキーマのテーブルを表示するには '\ dt *。*'を使い、特定のスキーマには '\ dt schema_name。*'を使います。 22 11月. 172017-11-22 06:34:33

  0

@トミー、スキーマは名前空間です。異なる名前空間に同じ名前の異なるテーブルがあるかもしれません。 30 11月. 172017-11-30 08:48:11


25

psqlコマンドに接続します - > psql --u {userName} {DBName}そして、以下のコマンドを入力して、DBに存在するスキーマの数を確認できます。

DBName=# \dn

それ以外の場合は、以下の手順で簡単に構文を確認できます。

  1. DBを接続したら、を押します。

    DBName=# help
    

以下の選択肢があります。

あなたはpsql、PostgreSQLへのコマンドラインインターフェースを使用しています。
タイプ:配布条件の場合は\ copyright
SQLコマンドのヘルプは\ h
\?psqlコマンドの助けを借りて
クエリを実行するには、\ gまたはセミコロンで終了します。
終了するには\ q

その後を押します

DBName=# \?

あなたは非常に簡単にすべてのオプションを手に入れるでしょう。


2

Postgres 9.3以降、psqlで情報コマンドの正確なSQL(\ d、\ du、\ dpなど)を取得するためにpostgresで使用できるトリックの1つは、transactionを使用することです。 postgres session、それからあなたのコマンドを入力してください:

begin;
\dn+

トランザクションがまだ実行されている間に、別のpostgresセッションを開き、pg_stat_activityを問い合わせれば正確なSQLを取得できます。

postgres=# select query from pg_stat_activity ;
                    query                 
-----------------------------------------------------------------------
    SELECT n.nspname AS "Name",                     +
     pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner",         +
     pg_catalog.array_to_string(n.nspacl, E'\n') AS "Access privileges",+
     pg_catalog.obj_description(n.oid, 'pg_namespace') AS "Description" +
    FROM pg_catalog.pg_namespace n                    +
    WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'   +
    ORDER BY 1;
+6

トリックする必要はありません。'\ set ECHO_HIDDEN on'を実行するだけです 11 9月. 162016-09-11 01:22:31

+4

または 'psql -E'として実行してください 22 12月. 162016-12-22 17:46:28