postgresql Postgres:查找给定用户的search_path并永久修改它

bbuxkriu  于 2023-04-20  发布在  PostgreSQL
关注(0)|答案(2)|浏览(304)

我想找到当前用户的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,如果什么都没有找到。
1.是否可以通过使用show search_path查找当前用户的search_path并使用下面的命令将myschema附加到它来永久设置它?

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

ggazkfy81#

如果你想知道这个设置是从哪里来的,试试pg_settings

SELECT setting, source, boot_val, reset_val, sourcefile, sourceline
FROM pg_settings
WHERE name = 'search_path';

然后,您可以看到当前设置的来源。
这将帮助您找出为什么两个会话具有不同的search_path集。
您可以按照您的建议使用ALTER ROLE ... IN DATABASE设置search_path,但请注意
1.在断开连接并重新连接之前,该设置不会生效。
1.该设置将被会话中的任何SET命令覆盖。

bvjveswy

bvjveswy2#

postgres=# SELECT rolname, rolconfig FROM pg_roles WHERE rolname=<name> ;

更直接一点

相关问题