方案
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...
的解决方法似乎是唯一的解决方案,但这种方法无法将持久搜索路径分配给角色。
答案 0 :(得分:2)
这是设计的。我引用了ALTER ROLE
这只发生在登录时;执行SET ROLE或SET SESSION AUTHORIZATION不会导致设置新的配置值。