information_schema

PostgreSQL スキーマ一覧

スキーマ一覧

データベース毎にスキーマは存在します。またスキーマにはオーナー(ユーザ)が存在します。(ユーザはデータベースクラスタ全体で共通ですが、スキーマは個々の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;

スキーマへのアクセス権限付与

スキーマの作成

各種オブジェクト一覧

スポンサーリンク
タイトルとURLをコピーしました