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

news/2024/7/9 21:09:26 标签: 数据库, postgresql

一 查看配置文件位置

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

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

highgo=# show config_file;
                   config_file                   
-------------------------------------------------
 /opt/highgo/hgdb-see-4.5.8/data/postgresql.conf
(1 row)
highgo=# show hba_file ;
                  hba_file                   
---------------------------------------------
 /opt/highgo/hgdb-see-4.5.8/data/pg_hba.conf
(1 row)
highgo=# show ident_file ;
                  ident_file                   
-----------------------------------------------
 /opt/highgo/hgdb-see-4.5.8/data/pg_ident.conf
(1 row)


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

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

二 查看运行时的参数值

1. 通过show命令查看

highgo=# show work_mem ;
 work_mem 
----------
 8MB
(1 row)

2. 通过pg_setting视图查看

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

3. 通过current_setting内置函数查看

highgo=# select current_setting('work_mem');
 current_setting 
-----------------
 8MB
(1 row)

三 参数修改生效条件


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

highgo=# select distinct context from pg_settings;
      context      
-------------------
 postmaster
 superuser-backend
 user
 internal
 backend
 sighup
 superuser
(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
highgo=# alter system set  work_mem  = '8MB';
ALTER SYSTEM

2. 数据库

highgo=# alter database db_test set work_mem  = '7MB';
ALTER DATABASE
highgo=# \c db_test
db_test=# show work_mem ;
 work_mem 
----------
 7MB
(1 row)

3. 用户级

db_test=# alter user user1 set work_mem  = '6MB';
ALTER ROLE
db_test=# \c db_test user1
db_test=> show work_mem ;
 work_mem 
----------
 6MB
(1 row)

查询用户级的配置

db_test=> select usename , useconfig from pg_user;
 usename |                                                 useconfig                                                 
---------+-----------------------------------------------------------------------------------------------------------
 user1   | {"search_path=\"$user\", public, dongsc",vacuum_cost_delay=1,commit_delay=1,wal_recycle=off,work_mem=6MB}
 dongsc4 | 
 zfwdba  | 
 sysdba  | 
 dongsc3 | 
 syssso  | 
 syssao  | 
 dongsc5 | 
 dongsc  | 
 dongsc2 | 
(10 rows)

4. 会话级

db_test=> set work_mem = '5MB';
SET
db_test=> show work_mem ;
 work_mem 
----------
 5MB
(1 row)

5. 事务级

db_test=> begin;
BEGIN
db_test=> show work_mem;
 work_mem 
----------
 5MB
(1 row)
db_test=> set local work_mem='4MB';      --修改事务内的workmem=4MB
SET
db_test=> show work_mem;
 work_mem 
----------
 4MB
(1 row)
db_test=> commit;
COMMIT
db_test=> show work_mem;           --事务结束后,work_mem恢复到会话级别的5MB
 work_mem 
----------
 5MB
(1 row)

http://www.niftyadmin.cn/n/5127970.html

相关文章

Python 编写确定个位、十位以上方法及各数位的和程序

Python 编写确定数字位方法 Python 编写确定个位、十位Python 编写确定个位、十位、百位方法解析&#xff1a;Python 各数位的和程序 利用%&#xff08;取余符号&#xff09;、//&#xff08;整除&#xff09;符号。 Python 编写确定个位、十位 num 17 a num % 10 b num /…

暄桐推荐|学书法的必读书目

在暄桐教室&#xff0c;写字之外&#xff0c;读书、静坐也是桐学们修习的功课。今天&#xff0c;便向你推荐&#xff0c;关于学习书法&#xff0c;暄桐教室的那些必读书目&#xff1a;    暄桐推荐学书法必读书之初阶书目&#xff1a;      对零基础的小白同学或刚入门…

场效应管器件

在面试硬件方面的工作时&#xff0c;我们通常会被提问模电方面的知识。 场效应管简称FET,有三级&#xff1a;源极(S)、漏极(D)、栅极&#xff08;G&#xff09;&#xff1b;可以实现电压控制电流源&#xff1b;“源极和漏极之间的漏极电流Id&#xff0c;由栅极的负电压进行控制…

javascript: weekOfYear 获取某天所处的一年中的周数

/** * Get the number of week for a specific day in a year. It will return 1 to 53. */ // 方法 1 export function weekOfYear(year: number, month: number, day: number) {const startDate new Date(year, 0, 1);const currentDate new Date(year, month - 1, day)…

vue核心面试题汇总【查缺补漏】

给大家推荐一个实用面试题库 1、前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;web前端面试题库 很喜欢‘万变不离其宗’这句话&#xff0c;希望在不断的思考和总结中找到Vue中的宗&#xff0c;来解答面试官抛出的…

Golang 继承

在面向对象的编程语言中&#xff0c;继承是一种重要的机制&#xff0c;它允许子类继承父类的属性和方法。然而&#xff0c;Go语言在设计时没有直接支持传统意义上的继承&#xff0c;而是提供了一种更为灵活和简洁的方式来实现类似的功能。本文将探讨Golang中实现继承的方法和最…

【机器学习】KNN算法-模型选择与调优

KNN算法-模型选择与调优 文章目录 KNN算法-模型选择与调优1. 交叉验证2. 超参数搜索-网格搜索&#xff08;Grid Search&#xff09;3. 模型选择与调优API4. 鸢尾花种类预测-代码和输出结果5. 计算距离 问题背景&#xff1a;KNN算法的K值不好确定 1. 交叉验证 交叉验证&#x…

ps2024滤镜插件Portraiture

Photoshop 是最常用到的综合性的设计工具&#xff0c;虽然PS一直在迭代升级&#xff0c;但是在细节功能上&#xff0c;PS总是无法完全满足全部所有的用户需求&#xff0c;今天coco玛奇朵推荐一个个截至目前最受欢迎的免费的PS插件&#xff0c;有了这些功能扩展的插件后PS如虎添…