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 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章