PG常用管理命令
查看服務進程:
select pid,usename,client_addr,client_port from pg_stat_activity;
查看當前數據庫實例的版本:
select version();
查看數據庫的啓動時間:
select pg_postmaster_start_time();
查看最後load配置文件的時間:
select pg_conf_load_time();
顯示當前數據庫時區:
show timezone;
postgres=# show timezone;
TimeZone
----------
PRC
(1 row)
postgres=# select now();
now
-------------------------------
2015-07-10 16:27:59.692621+08
(1 row)
顯示實例中有哪些數據庫:
postgres=# \l 或者 [postgre@pg-1 ~]$ psql -l
查看當前用戶名:
select user;
或者
select current_user;
查看session用戶:
select session_user;
查詢當前連接的數據庫名稱:
postgres=# select current_catalog,current_database();
current_database | current_database
------------------+------------------
postgres | postgres
(1 row)
查詢當前session所在客戶端的IP地址及端口:
select inet_client_addr(),inet_client_port();
查詢到當前數據庫服務器的IP地址及端口:
select inet_server_addr(),inet_server_port();
查詢當前session的後臺服務進程的pid:
postgres=# select pg_backend_pid();
pg_backend_pid
----------------
12504
(1 row)
通過操作系統命令看下此後臺進程:
[root@pg-1 postgresql-9.4.4]# ps -ef |grep 12504 |grep -v grep
postgre 12504 1590 0 16:34 ? 00:00:00 postgres: postgre postgres [local] idle
查看當前正在寫的WAL文件:
postgres=# select pg_xlogfile_name(pg_current_xlog_location());
pg_xlogfile_name
--------------------------
000000010000000000000001
(1 row)
查看當前WAL的buffer中還有多少字節的數據沒有寫到磁盤中:
postgres=# select pg_xlog_location_diff(pg_current_xlog_insert_location(),pg_current_xlog_location());
pg_xlog_location_diff
-----------------------
0
(1 row)
查看數據庫實例是否在做基礎備份:
postgres=# select pg_is_in_backup(),pg_backup_start_time();
pg_is_in_backup | pg_backup_start_time
-----------------+----------------------
f |
(1 row)
查看當前數據庫實例是Hot Standby狀態還是正常數據庫狀態:
postgres=# select pg_is_in_recovery();
pg_is_in_recovery
-------------------
f
(1 row)
查看數據庫大小:
postgres=# select pg_database_size('pgtest'),pg_size_pretty(pg_database_size('pgtest'));
pg_database_size | pg_size_pretty
------------------+----------------
6998688 | 6835 kB
(1 row)
注:如果數據庫中有很多表,使用上述命令將比較慢,也可能對當前系統產生不利的影響。pg_size_pretty()函數會把數字以MB、GB等格式顯示出來,這樣會更直觀。
查看錶的大小:
pgtest=# select pg_size_pretty(pg_relation_size('test01'));
pg_size_pretty
----------------
8192 bytes
(1 row)
注:僅計算表的大小,不包括索引的大小;
pgtest=# select pg_size_pretty(pg_total_relation_size('test01'));
pg_size_pretty
----------------
24 kB
(1 row)
注:包括索引大小
查看錶上所有索引的大小:
pgtest=# select pg_size_pretty(pg_indexes_size('test01'));
pg_size_pretty
----------------
16 kB
(1 row)
查看錶空間的大小:
pgtest=# select pg_size_pretty(pg_tablespace_size('pg_global'));
pg_size_pretty
----------------
437 kB
(1 row)
查看錶對應的數據文件:
pgtest=# select pg_relation_filepath('test01');
pg_relation_filepath
----------------------
base/16403/16410
(1 row)
修改postgresql.conf後,讓修改生效的方法有兩種:
1)在操作系統下使用:pg_ctl reload
2) 在psql中使用:select pg_reload_conf();
pgtest=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
pgtest=# select pg_conf_load_time();
pg_conf_load_time
-------------------------------
2015-07-10 17:44:45.620045+08
(1 row)
注:如果需要重啓數據庫服務的配置項,修改後使用上面的方法並不能使之生效。
切換log日誌到下一個的命令:
postgres=# select pg_rotate_logfile();
pg_rotate_logfile
-------------------
t
(1 row)
切換WAL日誌文件:
postgres=# select pg_switch_xlog();
pg_switch_xlog
----------------
0/17AF678
(1 row)
收工生成一次checkpoint:
postgres=# checkpoint;
CHECKPOINT
取消一個正在長時間執行的SQL方法:
有兩個函數可以完成這個功能:
1)pg_cancel_backend(pid):取消一個正在執行的SQL;
2)pg_terminate_backend(pid):終止一個後臺服務進程,同時釋放此後臺服務進程的資源。
這兩個函數的區別是:pg_cancel_backend()函數實際上是給正在執行的SQL任務配置一個取消標誌,正在執行的任務是在合適的時候檢測到此標誌後主動退出;但如果這個任務沒有主動檢測到這個標誌,則該任務就無法正常退出,這時需要使用pg_terminate_backend()命令在終止SQL的執行。
通常是先查詢pg_stat_activity,試圖找出長時間運行的SQL:
postgres=# select pid,usename,query_start,query from pg_stat_activity ;
pid | usename | query_start | query
------+---------+-------------------------------+--------------------------------------------------------------
1651 | postgre | 2015-07-11 15:35:39.745907+08 | select pid,usename,query_start,query from pg_stat_activity ;
1722 | postgre | 2015-07-11 15:35:17.114117+08 | select pg_sleep(100);
(2 rows)
然後在使用pg_cancel_backend()取消這個SQL,如果pg_cancel_backend()取消不了,再使用pg_terminate_backend():
postgres=# select pid,usename,query_start,query from pg_stat_activity ;
pid | usename | query_start | query
------+---------+-------------------------------+--------------------------------------------------------------
1651 | postgre | 2015-07-11 15:40:11.085173+08 | select pid,usename,query_start,query from pg_stat_activity ;
1747 | postgre | 2015-07-11 15:40:04.277972+08 | select pg_sleep(100);
(2 rows)
postgres=# select pg_cancel_backend(1747);
pg_cancel_backend
-------------------
t
(1 row)
postgres=# select pid,usename,query_start,query from pg_stat_activity ;
pid | usename | query_start | query
------+---------+-------------------------------+--------------------------------------------------------------
1651 | postgre | 2015-07-11 15:40:26.885772+08 | select pid,usename,query_start,query from pg_stat_activity ;
1747 | postgre | 2015-07-11 15:40:04.277972+08 | select pg_sleep(100);
(2 rows)
postgres=# select pg_terminate_backend(1747);
pg_terminate_backend
----------------------
t
(1 row)
postgres=# select pid,usename,query_start,query from pg_stat_activity ;
pid | usename | query_start | query
------+---------+-------------------------------+--------------------------------------------------------------
1651 | postgre | 2015-07-11 15:41:09.413959+08 | select pid,usename,query_start,query from pg_stat_activity ;
(1 row)
[postgre@pg-1 pg_log]$ pg_basebackup -D backup -Ft -z -P
pg_basebackup: could not connect to server: FATAL: number of requested standby connections exceeds max_wal_senders (currently 0)
由於沒有設置max_wal_senders參數,修改postgresql.conf
max_wal_senders = 2
wal_level = hot_standby
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.