2

シナリオ

CREATE SCHEMA testschema;
CREATE ROLE testrole LOGIN;
GRANT ALL ON SCHEMA testschema TO testrole;
ALTER ROLE testrole SET search_path = testschema;

次に、接続(ログイン)を開始すると、次のようにtestroleなります。

SHOW search_path; 

望ましい結果が得られます。

search_path 
-------------
testschema
(1 row)

ただし、スーパーユーザーとして接続 (ログイン) を開始し、次のようにすると:

SET SESSION AUTHORIZATION testrole;
SHOW search_path;

結果:

search_path   
----------------
"$user",public
(1 row)

(またはスーパーユーザーの検索パスが何であれ)


私の質問は、なぜSET SESSION AUTHORIZATION電流に影響しないのsearch_pathですか?
設計上のバグですか、それとも単に間違っていますか?

私が見つけた小さなことから、SET SEARCH path = schemanameafterの回避策SET SESSION...が唯一の解決策のようですが、そのようなものは、永続的な検索パスをロールに割り当てるという目的を無効にします。

4

1 に答える 1

2

これは仕様によるものです。のマニュアルを引用しますALTER ROLE

これはログイン時にのみ発生します。SET ROLE または SET SESSION AUTHORIZATION を実行しても、新しい構成値は設定されません。

于 2012-10-19T04:37:57.487 に答える