SET SESSION AUTHORIZATION和搜索路径

时间:2012-10-19 03:36:11

标签: 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
(1 row)

但是,如果我以超级用户身份启动连接(登录)并执行:

SET SESSION AUTHORIZATION testrole;
SHOW search_path;

结果:

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

(或超级用户的搜索路径)


我的问题是,为什么SET SESSION AUTHORIZATION不会影响当前的search_path? 这是一个错误,是设计还是我只是做错了?

从我发现的一点点来看,在SET SEARCH path = schemaname之后SET SESSION...的解决方法似乎是唯一的解决方案,但这种方法无法将持久搜索路径分配给角色。

1 个答案:

答案 0 :(得分:2)

这是设计的。我引用了ALTER ROLE

上的手册
  

这只发生在登录时;执行SET ROLE或SET SESSION   AUTHORIZATION不会导致设置新的配置值。