• PG 参数设置的正确方式


    #1.查看参数文件位置
    show config_file ;
    show hba_file ;
    show ident_file ;
    
    也可以用pg_settings数据字典来查看
    postgres=# select name,setting from pg_settings where category= 'File Locations';
           name        |               setting                
    -------------------+--------------------------------------
     config_file       | /u01/postgresql/data/postgresql.conf
     data_directory    | /u01/postgresql/data
     external_pid_file | 
     hba_file          | /u01/postgresql/data/pg_hba.conf
     ident_file        | /u01/postgresql/data/pg_ident.conf
    (5 rows)
    
    
    #2.查看当前会话的参数值
    1) 通过show 查看
    show 参数名 ;  
    show all;
    show work_mem ;
    
    2) 通过pg_settings查看
    select * from pg_settings where name like  '%work_mem%' ;
    
    3) 通过current_setting 内置函数查看
    select current_setting('work_mem');
    
    #3.修改pg的参数值
    通过SQL修改参数:alter system、alter database 。  可以通过\h 命令  的方式查看帮助文档 
    alter system 命令提供了一种改变全局默认值的从SQL可 访问的方法;它在功效上等效于编辑postgresql.conf
    alter database 为特定的数据库里的所有的用户设置参数 
    alter role 为数据库中的某个特定用户设置参数
    
    ##1.全局修改pg的参数.
    有些参数只有当pg服务重启的时候才生效,典型的例子就是shared_buffers,定义了共享内存的大小.
    许多参数在pg服务运行的时候就能修改.再更改之后像服务器执行一个reload操作,强制pg重新读取postgresql.conf,因此你只需要编辑postgresql.conf文件,再执行pg_ctl reload即可.
    对于需要重启的,在修改完postgresql后需要执行pg_ctl restart
    
    pg_file_settings查看你设置的参数是否生效.例如如果你设置了一个参数需要重启数据库才能生效或者设置错误,那么在此字典中会出现报错.
    
    对于9.4以后的版本,你还可以使用alter system 命令修改参数.使用alter system命令将修改postgresql.auto.conf文件
    
    alter system set work_mem='8MB';
    
    pg_ctl reload
    
    ##2.直接使用set命令,在会话层修改,修改之后将被用于未来的每一个事务,只对当前会话有效:
    set work_mem='16MB';
    
    ##3.set命令后添加local关键字,只在当前事务中修改,只在当前事务内有效:
    test=# begin;
    test=# set local work_mem='8MB';
    test=# show work_mem;
    test=# commit;
    
    ##4.使用reset恢复参数的默认值
    再pg_settings字典reset_val字段表示了如果使用reset,则此参数恢复的默认值为多少
    使用reset 参数名 来恢复某个参数的默认值,使用reset all来恢复所有的参数值.
    
    test=# reset work_mem;
    
    ##5.为特定的用户组设置参数
    1)为特定的数据库里的所有的用户设置参数,例如为testdb数据库所有的连接设置work_mem为16MB:
    test=# alter database testdb set work_mem='16MB';
     
    2)为数据库中的某个特定用户设置参数.例如为test用户,设置work_mem为2MB:
    经过测试发现,如果你同时为数据库和用户设置了特定参数,那么以用户为准.例如上面的,如果我用test用户连接到testdb数据库,那么我的work_mem应该为2MB:
    
    postgres=# alter role test set work_mem='2MB';
    postgres=# \c testdb test
    You are now connected to database “testdb” as user “test”.
    test=> show work_mem;
    work_mem
    2MB
    
    3)为某个特定用户连接到特定的数据库设置参数.例如为用户brent在数据库test中设置work_mem为8MB
    上面说的三种设置,优先级递增,也就是说,如果设置了1,2,3那么就以第3个为准,如果设置了1,2那么就是以2为准,以此类推.
    pg对此的实现方法和当用户连接数据库的时候,立刻手动执行set命令的效果完全相同
    
    test=# alter role test in database testdb set work_mem='8MB';
    ALTER ROLE
    
    查看你当前的参数值是从何处指定,可以通过查询pg_setttings中的source字段获取,例如如果设置了database级别的参数.那么查询结果应该如下:
    test=# select name,setting,source from pg_settings where name='work_mem';
    name | setting | source
    ----------±--------±---------
    work_mem | 16384 | database
    
    其它的,例如设置了第三种: 
    test=# \c testdb test
    You are now connected to database “testdb” as user “test”.
    test=> select name,setting,source from pg_settings where name='work_mem';
    name | setting | source
    ----------±--------±--------------
    work_mem | 8192 | database user
    
    ##6.通过shell 修改参数
    服务器和libpq客户端库都能通过 shell 接受参数值
    1在服务器启动期间,可以通过-c命令行参数把参数设置传递给postgres命令,这种方式提供的设置会覆盖通过postgresql.conf或者ALTER SYSTEM提供的设置,
    因此除了重启服务器之外无法从全局上改变它们





  • 相关阅读:
    ASP.NET Core 微信支付(一)【统一下单 APIV3】
    ASP.NET Core 跨域
    快速排序
    希尔排序(插入式与位移式优化)
    选择排序和插入排序
    冒泡排序
    八皇后问题
    递归与迷宫回溯问题
    逆波兰计算器
    栈实现综合计算器
  • 原文地址:https://www.cnblogs.com/cqdba/p/15870602.html
Copyright © 2020-2023  润新知