Postgres:查找给定用户的search_path并对其进行永久修改

时间:2019-08-30 12:25:56

标签: postgresql

我想找到当前用户的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' 

我的问题是:

  1. 这两个为什么返回不同的结果。我认为如果找不到任何内容,show search_path将返回默认值"$user", public

  2. 是否可以通过使用show search_path找到当前用户的search_path并使用以下命令将myschema附加到它来永久设置它?

ALTER ROLE vishal in DATABASE mydb set search_path = "$user", public, myschema;

1 个答案:

答案 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,但请注意

  1. 直到断开连接并重新连接,设置才会生效。

  2. 该设置将被会话中的任何SET命令覆盖。