スキーマ一覧
データベース毎にスキーマは存在します。またスキーマにはオーナー(ユーザ)が存在します。(ユーザはデータベースクラスタ全体で共通ですが、スキーマは個々のDBにて作成します)このあたりスキーマ≒ユーザの考えを持つOracleとは異なるところです。
スキーマ一覧SQL
DBを作成するとデフォルトで作成されるスキーマ(information_schema ,pg_catalog ,pg_toast)も出力しています。以下SQLを実行する際の注意点として、出力対象はアクセス権限のあるスキーマのみになります。スキーマへのアクセス権限を調べるにはこちらとなりますが、スーパーユーザ権限保持者で実行すると全てのスキーマ一覧を確認できます。
select catalog_name,schema_name,schema_owner from information_schema.schemata order by schema_name ;
スキーマ一覧出力例
catalog_name | schema_name | schema_owner
--------------+--------------------+--------------
myposdb | information_schema | postgres
myposdb | pg_catalog | postgres
myposdb | pg_toast | postgres
myposdb | prjschema | prjadmin
myposdb | public | postgres
myposdb | sooni | sooni
(6 rows)
myposdb=#
スキーマ一覧(メタコマンド版)
\dn
スキーマ一覧例(メタコマンド版)
myposdb=# \dn
List of schemas
Name | Owner
-----------+----------
prjschema | prjadmin
public | postgres
sooni | sooni
(3 rows)
myposdb=#
メタコマンドではデフォルトで作成されるスキーマ(information_schema ,pg_catalog ,pg_toast)は外して出力します。参考までにですが、\duが発行された際、内部では以下のようなSQLが流れます。(pg_始まりのスキーマ名と、information_schemaを除去している事確認できます。見慣れない比較演算子” !~ ” がありますが、これは「正規に一致しない」という意味です。)
SELECT n.nspname AS "Name", pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner" FROM pg_catalog.pg_namespace n WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema' ORDER BY 1;