show search_path ;
我可以设置当前会话的search_path:
set search_path = "$user", public, postgis;
同样,我可以使用以下命令永久设置给定数据库的search_path:
alter database mydb set search_path = "$user", public, postgis ;
我可以使用以下内容为给定角色(用户)永久设置search_path:
alter role johnny set search_path = "$user", public, postgis ;
但我想知道如何在更改之前确定数据库和角色设置(相对于search_path)?
您可以在目录表pg_db_role_setting
中找到角色和数据库的配置设置.
此查询检索给定角色或数据库的任何设置:
SELECT r.rolname, d.datname, rs.setconfigFROM pg_db_role_setting rsLEFT JOIN pg_roles r ON r.oid = rs.setroleLEFT JOIN pg_database d ON d.oid = rs.setdatabaseWHERE r.rolname = 'myrole' OR d.datname = 'mydb';
如果未设置任何内容,则下一个较低实例将确定search_path的默认状态,在这种情况下为postgresql.conf或在服务器启动时为命令行选项.有关:
> How does the search_path influence identifier resolution and the “current schema”
要取消设置角色或数据库的任何设置 – 此特定示例中的search_path:
ALTER ROLE myrole RESET search_path;
要么:
ALTER DATABASE mydb RESET search_path;
要么
ALTER ROLE myrole in DATABASE mydb RESET search_path;
切勿手动操作系统目录(pg_catalog.*)中的数据.按照ALTER ROLE
和ALTER DATABASE
手册中的说明使用DDL命令.实际上,RESET命令从pg_db_role_setting中删除一行,允许基本设置再次生效.我不会称之为复杂.