Postgresqlスキーマパスを永続的に設定


135

Postgresでスキーマパスを設定して、毎回スキーマドットテーブルを指定しないようにする必要がありますschema2.table。スキーマパスを設定します。

SET SCHEMA PATH a,b,c

Macの1つのクエリセッションでのみ機能するようですが、クエリウィンドウを閉じた後、パス変数はデフォルトに戻ります。

どうすれば永続化できますか?


SET search_path TO a、b、cだと思います。答えが言うように、SET SCHEMA PATH a、b、cではありません。
アルマンド

回答:


168

(サーバーへの管理アクセス権がない場合)

ALTER ROLE <your_login_role> SET search_path TO a,b,c;

知っておくべき2つの重要な点:

  1. スキーマ名が単純でない場合は、二重引用符で囲む必要があります。
  2. デフォルトのスキーマを設定a, b, cする順序は、スキーマがテーブルを検索する順序でもあるため、重要です。したがって、デフォルトの複数のスキーマで同じテーブル名を使用している場合でも、曖昧さはなく、サーバーは常に、最初に指定したスキーマのテーブルを使用しますsearch_path

19
また、a、b、c列挙の前後に引用符を明示的に使用しないことにも注意してください。過去15分間の
手首

4
@ Jmoney38一重引用符は使用しませんが、単純でないスキーマ名には二重引用符が必要です。
vitaly-t

136

デフォルトsearch_pathはデータベースレベルで設定できます。

ALTER DATABASE <database_name> SET search_path TO schema1,schema2;

または、ユーザーまたは役割レベルで:

ALTER ROLE <role_name> SET search_path TO schema1,schema2;

または、すべてのデータベースに共通のデフォルトスキーマがある場合、search_pathオプションを使用して、構成ファイルでシステム全体のデフォルトを設定できます。

データベースが作成されると、それが名前の隠された「テンプレート」データベースからデフォルトで作成されたtemplate1を、あなたは将来的に作成されたすべてのデータベース用の新しいデフォルトの検索パスを指定するには、そのデータベースを変更することができます。別のテンプレートデータベースCREATE DATABASE <database_name> TEMPLATE <template_name>を作成し、を使用してデータベースを作成することもできます。


9
psqlコマンドラインから不思議に思う人のために、\ dnでスキーマを一覧表示できます
BKSpurgeon

3
設定を有効にするには、セッションを切断して再接続する必要があります。
isapir 2017

お大事に。SQL ServerからPGにやってきたので、これはまったく新しい(そして奇妙な)ものです
Nate Anderson

24

ジョシュは正しいですが、彼は1つのバリエーションを省略しました:

ALTER ROLE <role_name> IN DATABASE <db_name> SET search_path TO schema1,schema2;

1つの特定のデータベースで、ユーザーの検索パスを設定します。


とても便利です。ありがとう
Alejandro TeixeiraMuñoz2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.