postgresql参数的设置

#服务配置文件postgresql.conf [postgres@fnddb data]$ ls -l postgresql.* -rw-------. 1 postgres postgres 88 Feb 4 22:20 postgresql.auto.conf -rw-------. 1 postgres postgres 21253 Feb 5 00:10 postgresql.conf postgresql.conf是默认的服务配置文件.因此大多数的修改参数都是在此文件中修改 postgresql.auto.conf是通过ALTER SYSTEM命令修改的参数,这里的参数值生效会覆盖postgresql.conf文件中的值. 手动不要修改postgresql.auto.conf文件

[postgres@fnddb data]$ cat postgresql.auto.conf 
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.

#如何让刚修改的配置文件生效.
服务器进程收到SIGHUP信号,就会触发读取这两个配置文件.并且会把此信号传播到其他运行中的服务进程去.
pg自带的重载配置文件功能如下:

[postgres@fnddb data]$ pg_ctl reload
server signaled
[postgres@fnddb data]$ psql 
psql (9.4.0)
Type "help" for help.

postgres=# select pg_reload_conf();
 pg_reload_conf 
----------------
 t
(1 row)

#通过sql来修改参数配置 不是所有的参数都可以在数据库运行的时候进行修改

###数据库级别参数设置###

postgres=# create user u01 password 'postgres';
CREATE ROLE
postgres=# create database db01 owner u01;
CREATE DATABASE
postgres=# alter database postgres set enable_indexscan=off;
ALTER DATABASE
postgres=# \d pg_settings
  View "pg_catalog.pg_settings"
   Column   |  Type   | Modifiers 
------------+---------+-----------
 name       | text    | 
......
postgres=# \x
Expanded display is on.
postgres=# select * from pg_settings where name='enable_indexscan';
-[ RECORD 1 ]----------------------------------------------
name       | enable_indexscan
setting    | off
......

换个用户

postgres=# \c postgres u01
You are now connected to database "postgres" as user "u01".
postgres=# \x
Expanded display is off.
postgres=> select current_setting('enable_indexscan');
 current_setting 
-----------------
 off
(1 row)

切换到db01数据库去

postgres=> \c db01
You are now connected to database "db01" as user "u01".
db01=> select current_setting('enable_indexscan');
 current_setting 
-----------------
 on
(1 row)

###用户级别的参数设置###

db01=> \c
You are now connected to database "db01" as user "u01".
db01=> select current_setting('enable_indexscan');
 current_setting 
-----------------
 on
(1 row)

db01=> \c postgres
You are now connected to database "postgres" as user "u01".
postgres=> select current_setting('enable_indexscan');
 current_setting 
-----------------
 off
(1 row)

postgres=> alter role u01 set enable_indexscan=off;
ALTER ROLE
postgres=> \c db01
You are now connected to database "db01" as user "u01".
db01=> select current_setting('enable_indexscan');
 current_setting 
-----------------
 off
(1 row)

###会话级别的参数设置###

db01=> set enable_indexscan=off;
SET
db01=> select current_setting('enable_indexscan');
 current_setting 
-----------------
 off
(1 row)

db01=> \c
You are now connected to database "db01" as user "u01".
db01=> select current_setting('enable_indexscan');
 current_setting 
-----------------
 on
(1 row)

###可以通过update pg_setting 来设置会话级参数

db01=> update pg_settings set setting='on' where name = 'enable_indexscan';
-[ RECORD 1 ]--
set_config | on

UPDATE 0
db01=> select * from pg_settings where name='enable_indexscan';
-[ RECORD 1 ]----------------------------------------------
name       | enable_indexscan
setting    | on
......

#参数还原

db01=> set enable_indexscan to default;
SET
db01=> alter role u01 set enable_indexscan to default;
ALTER ROLE
db01=> alter database db01 set enable_indexscan to default;
ALTER DATABASE

#结论:

  1. ALTER DATABASE --影响范围是数据库级别
  2. ALTER ROLE --影响范围是用户级别
  3. SET --影响范围是会话级别
  4. pg_settings,current_setting 查看的都是会话级别的

优先级: 会话级别 -> 用户级别 -> 数据库级别

//END

转载于:https://my.oschina.net/hippora/blog/375841

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值