数据库特定设置存储在哪里?

pri*_*cha 6 postgresql

Postgres 文档说ALTER SYSTEM将给定的参数值写入postgresql.auto.conf file,除了postgresql.conf.

我很好奇alter database set configuration parameter细节存储在哪里。

dez*_*zso 9

数据库级别的设置不存储在任何配置文件中,而是存储在pg_db_role_setting目录中,唯一的问题是如何将它们取出。

正如在类似情况下一样,psql在这里可以提供巨大帮助。关键是\set ECHO_HIDDEN on,然后显示不同元命令背后的查询。

在我的沙箱数据库之一中,我看到以下内容:

test=# \drds
                       List of settings
    Role     ? Database ?              Settings               
??????????????????????????????????????????????????????????????
 alice       ?          ? log_statement=none                 ?
             ?          ? work_mem=12MB
 bob         ?          ? log_statement=all                  ?
             ?          ? work_mem=64MB
 luser       ?          ? log_statement=all
 tom         ?          ? log_statement=all
             ? test     ? search_path=test, public
             ? wacky    ? default_transaction_read_only=true
Run Code Online (Sandbox Code Playgroud)

我们对没有指定用户的行感兴趣 - 这些正是您要询问的设置。随着ECHO_HIDDEN上,您还可以获得以下查询(格式是我的):

SELECT rolname AS "Role", 
       datname AS "Database",
       pg_catalog.array_to_string(setconfig, E'\n') AS "Settings"
  FROM pg_catalog.pg_db_role_setting s
  LEFT JOIN pg_catalog.pg_database d ON d.oid = setdatabase
  LEFT JOIN pg_catalog.pg_roles r ON r.oid = setrole
 ORDER BY 1, 2;
Run Code Online (Sandbox Code Playgroud)

可以简化此操作以仅获取特定于数据库的设置:

SELECT datname AS database,
pg_catalog.array_to_string(setconfig, E'\n') AS settings
FROM pg_catalog.pg_db_role_setting s
JOIN pg_catalog.pg_database d ON d.oid = setdatabase ORDER BY 1, 2;

 database ?              settings               
????????????????????????????????????????????????
 test     ? search_path=test, public
 wacky    ? default_transaction_read_only=true
Run Code Online (Sandbox Code Playgroud)