use*_*833 73 postgresql configuration
我可以看到电流search_path:
show search_path ;
Run Code Online (Sandbox Code Playgroud)
我可以search_path为当前会话设置:
set search_path = "$user", public, postgis;
Run Code Online (Sandbox Code Playgroud)
同样,我可以search_path为给定的数据库永久设置:
alter database mydb set search_path = "$user", public, postgis ;
Run Code Online (Sandbox Code Playgroud)
我可以使用以下命令永久设置search_path给定角色(用户):
alter role johnny set search_path = "$user", public, postgis ;
Run Code Online (Sandbox Code Playgroud)
但我想知道如何在更改数据库和角色设置search_path之前确定它们是什么(相对于)?
Erw*_*ter 55
您可以在目录表中找到角色和数据库的配置设置pg_db_role_setting。
此查询检索给定角色或数据库的任何设置:
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 = 'myrole' OR d.datname = 'mydb';
Run Code Online (Sandbox Code Playgroud)
如果没有设置,下一个较低的情况下决定的默认状态search_path,这是postgresql.conf在服务器启动这种情况下或命令行选项。有关的:
要取消 设置角色或数据库的任何设置 -search_path在此特定示例中:
ALTER ROLE myrole RESET search_path;
Run Code Online (Sandbox Code Playgroud)
或者:
ALTER DATABASE mydb RESET search_path;
Run Code Online (Sandbox Code Playgroud)
或者:
ALTER ROLE myrole in DATABASE mydb RESET search_path;
Run Code Online (Sandbox Code Playgroud)
切勿pg_catalog.*手动操作系统目录 ( )中的数据。使用ALTER ROLE和手册中的说明使用 DDL 命令ALTER DATABASE。
本质上,该RESET命令删除了一行,pg_db_role_setting使基本设置再次生效。我不会说那是复杂的。
数据库和角色的永久设置存储在 pg_db_role_settings系统集群范围表中。
此表中仅存在传递给ALTER USER和 的设置ALTER DATABASE。要获取除这些命令之外配置的值:
任何更改之前的设置值,包括在集群级别(通过全局配置postgresql.conf)可以从数据库中查询:
SELECT boot_val FROM pg_settings WHERE name='search_path';
Run Code Online (Sandbox Code Playgroud)会话中任何更改(通过SET命令)之前的设置值可以从数据库中查询:
SELECT reset_val FROM pg_settings WHERE name='search_path';
Run Code Online (Sandbox Code Playgroud)当在 中设置非默认值时postgresql.conf,独立于当前会话在 SQL 中获取该值并不简单。pg_settings.boot_val不会,因为它会忽略配置文件中的更改,pg_settings.reset_val也不会,因为它会受到可能通过ALTER USER/ALTER DATABASE. DBA 获取值的最简单方法是在postgresql.conf. 否则,请参阅将
search_path 重置为全局集群默认值,其中详细介绍了此主题。
小智 6
select * from pg_user;
Run Code Online (Sandbox Code Playgroud)
对于 postgres 和 Redshift 是正确的。与依赖于 的先前答案相比,这似乎太简单了pg_db_role_setting,但该useconfig列将包含用户配置列表,包括search_path, 格式为列表。
更有选择性:
rs.db.batarang.com cooldb:cooldude =#> select usename
, useconfig
from pg_user
where usename = 'cooldude';
????????????????????????????????????????????????????????????????????
? usename ? useconfig ?
????????????????????????????????????????????????????????????????????
? cooldude ? {"search_path=dirt, test, \"$user\", public, prod"} ?
????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
我认为这个用户表包含集群中的所有用户,而不仅仅是特定的数据库——但我没有验证。