#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提供的設置,
因此除了重啟服務器之外無法從全局上改變它們