Sql 设置会话授权和搜索路径

Sql 设置会话授权和搜索路径,sql,postgresql,session,postgresql-9.1,Sql,Postgresql,Session,Postgresql 9.1,场景 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

场景

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…
之后的
SET SEARCH path=schemaname
的解决方法似乎是唯一的解决方案,但这种方法无法实现将持久搜索路径分配给角色的目的。

这是出于设计。我引述手册中关于

这只发生在登录时;正在执行SET角色或SET会话 授权不会导致设置新的配置值