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 回答