• postgres配置参数生效方式和优先级


    一 查看配置文件位置

    需求:需要用户有pg_read_all_settings权限或者是superUser

    1. 通过show命令查看配置文件位置

    1. highgo=# show config_file;
    2.                    config_file                   
    3. -------------------------------------------------
    4.  /opt/highgo/hgdb-see-4.5.8/data/postgresql.conf
    5. (1 row)
    6. highgo=# show hba_file ;
    7.                   hba_file                   
    8. ---------------------------------------------
    9.  /opt/highgo/hgdb-see-4.5.8/data/pg_hba.conf
    10. (1 row)
    11. highgo=# show ident_file ;
    12.                   ident_file                   
    13. -----------------------------------------------
    14.  /opt/highgo/hgdb-see-4.5.8/data/pg_ident.conf
    15. (1 row)


    2. 通过pg_setting表查看配置文件位置

    1. highgo=# select name,setting from pg_settings where category= 'File Locations';
    2.        name        |                     setting                     
    3. -------------------+-------------------------------------------------
    4.  config_file       | /opt/highgo/hgdb-see-4.5.8/data/postgresql.conf
    5.  data_directory    | /opt/highgo/hgdb-see-4.5.8/data
    6.  external_pid_file
    7.  hba_file          | /opt/highgo/hgdb-see-4.5.8/data/pg_hba.conf
    8.  ident_file        | /opt/highgo/hgdb-see-4.5.8/data/pg_ident.conf
    9. (5 rows)

    二 查看运行时的参数值

    1. 通过show命令查看

    1. highgo=# show work_mem ;
    2.  work_mem 
    3. ----------
    4.  8MB
    5. (1 row)

    2. 通过pg_setting视图查看

    1. highgo=# select name,setting from pg_settings where name in ('work_mem');
    2.    name   | setting 
    3. ----------+---------
    4.  work_mem | 8192
    5. (1 row)

    3. 通过current_setting内置函数查看

    1. highgo=# select current_setting('work_mem');
    2.  current_setting 
    3. -----------------
    4.  8MB
    5. (1 row)

    三 参数修改生效条件


    1. 通过pg_settings视图检查参数生效条件

    1. highgo=# select distinct context from pg_settings;
    2.       context      
    3. -------------------
    4.  postmaster
    5.  superuser-backend
    6.  user
    7.  internal
    8.  backend
    9.  sighup
    10.  superuser
    11. (7 rows)
    类型描述
    internal这些参数不能直接修改,他们反应了内部确定的值,其中一些可以通过重新initdb来修改,例如block_size,另一些则不能修改,例如server_version(数据库版本)
    postmaster这些参数只能在数据库服务启动时应用,因此修改这类参数需要重新启动数据库
    sighup应用这些配置需要向postmaster发送sighup信号,使其重新读取配置文件,所以使其生效需要执行pg_ctl reload或者pg_reload_conf(),并且postmaster还将sighup发送到子进程,让所有子进程都获取参数的新值。
    superuser-backend1.必须是superuser或适当权限才能修改该参数
    2.在配置文件中修改后,需要发送SIGHUP使其生效
    3.当前会话无法使新参数生效,无法通过set在当前会话中配置新值,只能影响后续启动的会话,
    典型参数是log_connections和log_disconnections
    backend1. 在配置文件中修改后,需要发送SIGHUP使其生效
    2. 当前会话无法使新参数生效,无法通过set在当前会话中配置新值,只能影响后续启动的会话
    superuser1. 必须是superuser或适当权限才能修改该参数
    user1. 普通用户可执行
    2. 可按照用户/库进行单独配置

    按层级排列如下:

    等级和生效方式internalpostmastersighupsuperuser-backendbackendsuperuseruser
    无需重新initdb
    无需重启
    非全局,可按用户/库修改
    当前会话即可生效
    普通用户可修改

    四 配置文件级、数据库级、用户级、会话级、事务级


    优先顺序:
    配置文件级<数据库级<用户级<会话级<事务级

    1. 配置文件级

    直接修改配置文件或alter system,然后reload或pg_reload_conf()

    vim /opt/highgo/hgdb-see-4.5.8/data/postgresql.conf
    1. highgo=# alter system set  work_mem  = '8MB';
    2. ALTER SYSTEM

    2. 数据库级

    1. highgo=# alter database db_test set work_mem  = '7MB';
    2. ALTER DATABASE
    3. highgo=# \c db_test
    4. db_test=# show work_mem ;
    5.  work_mem 
    6. ----------
    7.  7MB
    8. (1 row)

    3. 用户级

    1. db_test=# alter user user1 set work_mem  = '6MB';
    2. ALTER ROLE
    3. db_test=# \c db_test user1
    4. db_test=> show work_mem ;
    5.  work_mem 
    6. ----------
    7.  6MB
    8. (1 row)

    查询用户级的配置

    1. db_test=> select usename , useconfig from pg_user;
    2.  usename |                                                 useconfig                                                 
    3. ---------+-----------------------------------------------------------------------------------------------------------
    4.  user1   | {"search_path=\"$user\", public, dongsc",vacuum_cost_delay=1,commit_delay=1,wal_recycle=off,work_mem=6MB}
    5.  dongsc4
    6.  zfwdba  | 
    7.  sysdba  | 
    8.  dongsc3
    9.  syssso  | 
    10.  syssao  | 
    11.  dongsc5
    12.  dongsc  | 
    13.  dongsc2
    14. (10 rows)

    4. 会话级

    1. db_test=> set work_mem = '5MB';
    2. SET
    3. db_test=> show work_mem ;
    4.  work_mem 
    5. ----------
    6.  5MB
    7. (1 row)

    5. 事务级

    1. db_test=> begin;
    2. BEGIN
    3. db_test=> show work_mem;
    4.  work_mem 
    5. ----------
    6.  5MB
    7. (1 row)
    8. db_test=> set local work_mem='4MB';      --修改事务内的workmem=4MB
    9. SET
    10. db_test=> show work_mem;
    11.  work_mem 
    12. ----------
    13.  4MB
    14. (1 row)
    15. db_test=> commit;
    16. COMMIT
    17. db_test=> show work_mem;           --事务结束后,work_mem恢复到会话级别的5MB
    18.  work_mem 
    19. ----------
    20.  5MB
    21. (1 row)
  • 相关阅读:
    y118.第七章 服务网格与治理-Istio从入门到精通 -- Istio流量治理快速入门(四)
    [ESP] 私有版Rainmaker User Mapping
    Android 12.0 自定义仿小米全面屏手势导航左右手势滑动返回UI效果
    基于springboot 手工艺品在线展示系统-计算机毕设 附源码 42553
    赶紧收藏!2024 年最常见 20道 Kafka面试题(五)
    B端产品实战课读书笔记:第七章B端产品常用功能设计
    Linux命令:scp
    Linux 环境基础开发工具
    学生免费申请IDEA使用流程
    一种速度引导的哈里斯鹰优化算法
  • 原文地址:https://blog.csdn.net/dsc1245/article/details/134077073