You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:09:01