かなめのロジック

フリーSEの雑記ブログ。ORACLEやPostgreSQL、情報セキュリティ、金融について主に書いています。

サーチパス(検索パス)を設定する

time 2018/04/27

サーチパス(検索パス)を設定する

PostgreSQLにおいて、とあるスキーマに属しているテーブルを検索する際に、テーブルの前にスキーマを指定して検索を行うことができます。ですが、サーチパス(検索パス)を適切に設定することでスキーマの指定を省略することができます。

sponsored link

サーチパス(検索パス)とは

サーチパス(検索パス)とは、検索するスキーマのリストです。

スキーマが明示的に指定されなかった場合に使用され、サーチパスに従ってどのテーブルを指しているのかを判別します。

サーチパスで最初に一致したテーブルが、該当テーブルだと解釈します。

デフォルトの設定

サーチパスのデフォルト設定は、①接続したユーザーと同名のスキーマ ②publicスキーマ となっています。

確認方法

現在のサーチパスを確認するには、psqlでDBに接続し【SHOW search_path;】を使用します。

※カンマ区切りで指定、先頭の方が優先度が高い
※”$user”は、接続したユーザーと同名のスキーマの意味

設定方法

サーチパスをデフォルトから変更するには以下の3つの設定方法があります。

全ユーザーで永続的に設定

全ユーザーで永続的に設定するには、PostgreSQLの設定ファイルであるpostgresql.confを編集します。

デフォルトで以下となっていますので、先頭のコメントの#を消し、設定したい値に編集します。

※カンマ区切りで指定、先頭の方が優先度が高い
※”$user”は、接続したユーザーと同名のスキーマの意味

その後、設定を反映するためにPostgreSQLをリロードします。

特定ユーザーで永続的に設定

特定ユーザーで永続的に設定するには、psqlでDBに接続しALTERを使用します。

※接続中のpsqlでは有効にはならないので再ログインが必要

一時的に設定

一時的にpsqlのセッション内でだけで設定するには、【SET search_path TO サーチパス;】を使用します。

注意点

同名のテーブル

同名のテーブルが複数のスキーマに存在する場合、サーチパスを把握しておかないと、どのテーブルにアクセスしているのか混乱します。

最後に

サーチパスを適切に設定することで毎回スキーマを指定する煩雑さから解放されます。また、アプリケーションの中ではスキーマを記述しないことも多いのです。

ぜひ、おさえておきましょう。

sponsored link

管理人

かなめ

フリーの業務系システムエンジニア。情報処理安全確保支援士。 ORACLEと金融と子育ての狭間で、元気に楽しくやってます。 [詳細]

管理人twitter

ブログ村



sponsored link