PostgreSQLのすべてのスキーマをリストするにはどうすればよいですか?


239

PostgreSQL v9.1を使用している場合、SQLを使用してすべてのスキーマをリストするにはどうすればよいですか?

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

SELECT something FROM pg_blah;

回答:


259

すべてのスキーマをリストするには、(ANSI)標準のINFORMATION_SCHEMAを使用します

select schema_name
from information_schema.schemata;

マニュアルの詳細

代わりに:

select nspname
from pg_catalog.pg_namespace;

マニュアルの pg_catalogの詳細


250

psqlコマンドラインを使用する場合、command を使用してすべてのスキーマをリストできます\dn


ありがとう。\ dnによってスキーマのみが返されると便利ですが、この場合はlibpq / libpqxxを使用して接続するブートストラップアプリを記述しているため、CLIアクセス権はありません。
ステファン

1
していること、スキーマ\dnの表とは反対に、一覧表示されます\dt示していますか?
トミー

8
@Tommy \dtは、パブリックスキーマのテーブルをリストします。すべてのスキーマの表を表示する\dt *.*には、特定のスキーマを使用します\dt schema_name.*
深刻な

@Tommy、スキーマは名前空間です。異なる名前空間に同じ名前の異なるテーブルがある場合があります。
エップスイグ

38

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

DBName=# \dn

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

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

    DBName=# help

以下のオプションがあります:

PostgreSQLへのコマンドラインインターフェイスであるpsqlを使用しています。
次のように入力します。配布用語については\ copyright、
SQLコマンドのヘルプについては\ h
\?psqlコマンドのヘルプ
\ gまたはクエリを実行するセミコロンで終了する
\ q終了する

次に

DBName=# \?

すべてのオプションを非常に簡単に取得できます。


9

postgres 9.3以降、postgresでpsqlの情報コマンド(\ d、\ du、\ dpなど)の正確なsqlを取得するために使用できる1つのトリックは、トランザクションを使用することです。トリックの進め方は次のとおりです。1つのpostgresセッションを開き、コマンドを入力します。

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;

12
それをだます必要はありません。ちょうど実行\set ECHO_HIDDEN on
ニックバーンズ

8
または次のように実行しますpsql -E
エヴァンキャロル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.