Postgres:查询指定用户search_path并永久修改的问题
关于PostgreSQL search_path的两个疑问解答
嘿,我来帮你理清这两个问题~
1. 为什么show search_path和查询pg_db_role_setting结果不同?
你说得没错,当没有自定义设置时,show search_path返回的是PostgreSQL的系统默认值:"$user", public。但这个默认值并不会存储在pg_db_role_setting系统视图里——这个视图只保存你手动设置过的自定义配置。
你执行的查询语句没返回结果,恰恰说明用户vishal在当前(或指定的)数据库里,从来没有通过ALTER ROLE/ALTER DATABASE这类命令修改过search_path,所以视图里没有对应的记录。只有当你手动设置过自定义的search_path后,这条记录才会出现在pg_db_role_setting中。
2. 能不能用ALTER ROLE...SET来永久追加myschema到search_path?
完全可以!你写的这条命令:
ALTER ROLE vishal IN DATABASE mydb set search_path = "$user", public, myschema;
是正确的,它会永久为用户vishal在数据库mydb中设置自定义的search_path,以后vishal每次连接到mydb时,都会自动使用这个包含myschema的路径。
这里有几个小细节要注意:
- 这个设置是用户+数据库级别的,如果想让vishal在所有数据库连接时都用这个search_path,去掉
IN DATABASE mydb即可:ALTER ROLE vishal set search_path = "$user", public, myschema; - 这个修改不会立即生效,需要用户重新连接数据库才会生效;如果想在当前连接马上生效,可以手动执行:
SET search_path = "$user", public, myschema; - 设置完成后,你再执行之前的
pg_db_role_setting查询语句,就能看到对应的配置记录了。
内容的提问来源于stack exchange,提问作者Vishal
相关产品推荐
相关产品推荐

