我想找到当前用户的search_path并对其进行永久修改。
我可以使用show search_path
找到它,但是当我尝试使用下面的查询来查找它时,它什么也没返回
SELECT r.rolname, d.datname, rs.setconfig
FROM pg_db_role_setting rs
LEFT JOIN pg_roles r ON r.oid = rs.setrole
LEFT JOIN pg_database d ON d.oid = rs.setdatabase
WHERE r.rolname = 'vishal'
我的问题是:
这两个为什么返回不同的结果。我认为如果找不到任何内容,show search_path
将返回默认值"$user", public
。
是否可以通过使用show search_path
找到当前用户的search_path并使用以下命令将myschema附加到它来永久设置它?
ALTER ROLE vishal in DATABASE mydb set search_path = "$user", public, myschema;
答案 0 :(得分:1)
如果您想找出设置的来源,请尝试pg_settings
:
SELECT setting, source, boot_val, reset_val, sourcefile, sourceline
FROM pg_settings
WHERE name = 'search_path';
然后您可以看到当前设置的来源。
这应该有助于您找出两个会话为何设置了不同的search_path
。
您可以按照建议使用search_path
来设置ALTER ROLE ... IN DATABASE
,但请注意
直到断开连接并重新连接,设置才会生效。
该设置将被会话中的任何SET
命令覆盖。