PostgreSQLのスキーマについて

Published by

on

■スキーマとは

PostgreSQLにおける「スキーマ」とは、データベース内のオブジェクト(テーブル、ビュー、関数など)をグループ化するための論理構造です。異なるユーザーやアプリケーションが同じデータベース内で同じ名称を用いても衝突することなく利用できるように、スキーマを使用することで独自の名前空間を持つことができます。

■publicスキーマとは

PostgreSQLでは「public」というスキーマがデフォルトで存在します。オブジェクトの作成や参照時にスキーマ名を省略するとデフォルトでこのpublicスキーマを参照する仕組みになっています。

スキーマを参照する順序は「検索パス(サーチパス)」と呼ばれデフォルトでは「”$user”, public」の順となっています。(検索パスについては後述します)

■スキーマの作成

「CREATE SCHEMA スキーマ名;」で作成します。結果は「\dn」で確認します。(参考:https://note2self.blog/2024/08/28/psql%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89/

CREATE SCHEMA xxxxx;

■スキーマの削除

スキーマの削除にはスキーマ内のオブジェクトを削除しておく必要があります。ですが「CASCADE」オプションをつけることでスキーマ削除時にオブジェクトも同時に削除させることもできます。

DROP SCHEMA xxxxx CASCADE;

■検索パスとは

本来、特定のオブジェクトにアクセスするには「スキーマ名.オブジェクト名」という記法で特定する必要があります。しかしPostgreSQLではどのスキーマを参照するかを決定する仕組みがあります。これが検索パスです。例えば検索パスに「APP01」が含まれていると、以下の指定ができます。

SELECT * FROM APP01.商品マスタ; --検索パスが未設定
SELECT * FROM 商品マスタ; --検索パスが設定済

上述しましたが、デフォルトでは「”$user”, public」と定義されているため、ユーザ名と同名のスキーマ、もしくはpublicスキーマ以外のスキーマで定義している場合はオブジェクトが見つけられません。検索パスを確認し、設定変更するには以下を実行します。

SHOW SEARCH_PATH; --検索パスの確認

検索パスに設定を追加するには以下を実行します。(以下では「APP01」を追加しています)

SET SEARCH_PATH TO APP01,public; --検索パスの追加

コメントを残す