PG修改参数方法
1.查看参数文件位置
postgres=# show config_file;
config_file
----------------------------------
/data/pgsql_data/postgresql.conf
(1 row)
postgres=# show hba_file;
hba_file
------------------------------
/data/pgsql_data/pg_hba.conf
(1 row)
postgres=# show ident_file;
ident_file
--------------------------------
/data/pgsql_data/pg_ident.conf
(1 row)
2.查看当前会话参数
show all;
postgres=# show enable_hashjoin;
enable_hashjoin
-----------------
on
(1 row)
postgres=# \x
Expanded display is on.
postgres=# select * from pg_settings where name in ('enable_hashjoin');
-[ RECORD 1 ]---------------------------------------------
name | enable_hashjoin
setting | on
unit |
category | Query Tuning / Planner Method Configuration
short_desc | Enables the planner's use of hash join plans.
extra_desc |
context | user
vartype | bool
source | default
min_val |
max_val |
enumvals |
boot_val | on
reset_val | on
sourcefile |
sourceline |
3.修改参数值
3.1全局修改pg的参数.
- 1.alter system 命令修改参数.使用alter system命令将修改postgresql.auto.conf文件,而不是postgresql.conf,这样可以很好的保护postgresql.conf文件,加入你使用很多alter system命令后搞的一团糟,那么你只需要删除postgresql.auto.conf,再重新加
postgres=# show work_mem;
-[ RECORD 1 ]-
work_mem | 4MB
postgres=# alter system set work_mem='8MB';
ALTER SYSTEM
postgres=# show work_mem;
-[ RECORD 1 ]-
work_mem | 4MB
[postgres@mysql56 pgsql_data]$ cat postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by ALTER SYSTEM command.
work_mem = '8MB'
3.2修改会话级参数
使用set命令,在会话层修改,修改之后将被用于未来的每一个事务,只对当前会话有效
postgres=# set work_mem='16MB';
SET
postgres=# show work_mem;
-[ RECORD 1 ]--
work_mem | 16MB
postgres=# set session work_mem='32MB';
SET
3.3添加local关键字,只在当前事务中修改,只在当前事务内有效:
postgres=# show work_mem;
-[ RECORD 1 ]--
work_mem | 32MB
postgres=# begin;
BEGIN
postgres=# set local work_mem='8MB';
SET
postgres=# show work_mem;
-[ RECORD 1 ]-
work_mem | 8MB
postgres=# commit;
COMMIT
postgres=# show work_mem;
-[ RECORD 1 ]--
work_mem | 32MB
postgres=#
4.reset回复默认值
postgres=# show work_mem;
-[ RECORD 1 ]--
work_mem | 32MB
postgres=# reset work_mem;
RESET
postgres=# show work_mem;
-[ RECORD 1 ]-
work_mem | 4MB
# reset all回复所有默认值
5.为特定的数据库里的所有的用户设置参数,例如为test数据库所有的连接设置work_mem为16MB:
postgres=# alter database bluemoon set work_mem='16MB';
ALTER DATABASE
6.为数据库中的某个特定用户设置参数.例如为brent用户,设置work_mem为2MB:
postgres=# alter role bluemoon set work_mem='2MB';
ALTER ROLE
# 数据库中与用户粒度为准
7.当前的参数值是从何处指定,可以通过查询pg_setttings中的source字段获取
postgres=# select name,setting,source from pg_settings where name='work_mem';
-[ RECORD 1 ]-----
name | work_mem
setting | 4096
source | default
- archive_command
archive_command = 'DATE=`date +%Y%m%d`; DIR="/mysqldata/pg/pgarch/$DATE; (test -d $DIR||mkdir -p $DIR)&&cp %p $DIR/%f"'
# %p代表的是相对目录$PGDATA下的pg_xlog, %f代表的是文件名