查看系統(tǒng)信息
查看當前數(shù)據(jù)庫實例的版本信息:
select version();
查看數(shù)據(jù)庫的啟動時間:
select pg_postmaster_start_time();
使用pg_ctl reload后會改變配置的裝載時間运挫。查看最后load配置文件的時間:
select pg_conf_load_time();
顯示當前數(shù)據(jù)庫時區(qū):
show timezone;
注意挠日, 數(shù)據(jù)庫的時區(qū)有時并不是當前操作系統(tǒng)的時區(qū)惯雳, 此時在數(shù)據(jù)庫中看到的時間就與在操作系統(tǒng)中看到的不一致邪驮。
顯示當前數(shù)據(jù)庫時間:
select now();
查看當前實例中有哪些數(shù)據(jù)庫:
\l
查看當前用戶名:
select user;
select current_user;
查看session用戶:
select session_user;
通常情況下“session_user”與“user”是相同的候味。
但當用命令“SET ROLE”改變用戶的角色時笙隙, 這兩者就不同了洪灯,session_user始終是原始用戶, 而user是當前的角色用戶逃沿。
查詢當前連接的數(shù)據(jù)庫名稱:
select current_catalog;
select current_database();
使用current_catalog與current_database()都顯示當前連接的數(shù)據(jù)庫名稱婴渡, 兩者的功能完全相同幻锁, 只不過catalog是SQL標準中的用語凯亮。
查詢當前session所在客戶端的IP地址及端口:
select inet_client_addr(),inet_client_port();
查詢當前數(shù)據(jù)庫服務(wù)器的IP地址及端口:
select inet_server_addr(),inet_server_port();
查詢當前session的后臺服務(wù)進程的PID:
select pg_backend_pid();
通過操作系統(tǒng)命令查看此后臺服務(wù)進程:
ps -ef|grep pid號 |grep -v grep
查看當前參數(shù)配置情況,如查看shared_buffers參數(shù):
show shared_buffers;
select current_setting('shared_buffers');
修改當前session的參數(shù)配置:
set maintenance_work_mem to '128MB';
SELECT set_config('maintenance_work_mem', '128MB', false);
查看當前正在寫的WAL文件:
select pg_xlogfile_name(pg_current_xlog_location());
查看當前WAL文件的buffer中還有多少字節(jié)的數(shù)據(jù)沒有寫入磁盤中:
select pg_xlog_location_diff(pg_current_xlog_insert_location(), pg_current_xlog_location());
查看數(shù)據(jù)庫實例是否正在做基礎(chǔ)備份:
select pg_is_in_backup(), pg_backup_start_time() ;
查看當前數(shù)據(jù)庫實例處于Hot Standby狀態(tài)還是正常數(shù)據(jù)庫狀態(tài):
select pg_is_in_recovery();
如果上面命令的運行結(jié)果為真哄尔, 說明數(shù)據(jù)庫處于Hot Standby狀態(tài)假消。
查看數(shù)據(jù)庫的大小:
select pg_database_size('osdba'), pg_size_pretty(pg_database_size('osdba'));
上面的命令用于查看數(shù)據(jù)庫“osdba”的大小岭接。
注意富拗, 如果數(shù)據(jù)庫中有很多表, 使用上述命令查詢將比較慢鸣戴, 也可能對當前系統(tǒng)產(chǎn)生不利的影響啃沪。
在上面的命令中, pg_size_pretty()函數(shù)會把數(shù)字以MB窄锅、 GB等格式顯示出來创千, 這樣的結(jié)果更加直觀。
查看表的大腥胪怠:
select pg_size_pretty(pg_relation_size('t1')) ;
select pg_size_pretty(pg_total_relation_size('t1')) ;
上例中追驴, pg_relation_size()僅計算表的大小, 不包括索引的大小疏之, 而pg_total_relation_size()則會把表上索引的大小也計算進來殿雪。
查看表上所有索引的大小:
select pg_size_pretty(pg_indexes_size('t1'));
注意锋爪, pg_indexes_size()函數(shù)的參數(shù)名是一個表對應(yīng)的OID(輸入表名會自動轉(zhuǎn)換成表的OID) 丙曙, 而不是索引的名稱爸业。
查看表空間的大小:
select pg_size_pretty(pg_tablespace_size('pg_global'));
select pg_size_pretty(pg_tablespace_size('pg_default'));
上面的示例中查看了全局表空間“pg_global”和默認表空間“pg_default”的大小亏镰。
查看表對應(yīng)的數(shù)據(jù)文件:
select pg_relation_filepath('test01');
系統(tǒng)維護常用命令
修改配置文件“postgresql.conf”后沃呢, 要想讓修改生效, 有以下兩種方法拆挥。
- 方法一: 在操作系統(tǒng)下使用如下命令:
pg_ctl reload
- 方法二: 在psql中使用如下命令:
select pg_reload_conf();
注意薄霜, 如果是需要重啟數(shù)據(jù)庫服務(wù)才能使修改生效的配置項, 使用上面的方法無效纸兔。
使用上面的方法能使修改生效的配置項都是不需要重啟數(shù)據(jù)庫服務(wù)就能使修改生效的配置項惰瓜。
切換log日志文件到下一個:
select pg_rotate_logfile();
切換WAL日志文件:
select pg_switch_xlog();
手動產(chǎn)生一次checkpoint:
checkpoint;
取消正在長時間執(zhí)行的SQL命令的方法有以下兩種。
- pg_cancel_backend(pid): 取消一個正在執(zhí)行的SQL命令汉矿。
- pg_terminate_backend(pid): 終止一個后臺服務(wù)進程崎坊, 同時釋放此后臺服務(wù)進程的資源。
這兩個函數(shù)的區(qū)別是洲拇, pg_cancel_backend()函數(shù)實際上是給正在執(zhí)行的SQL任務(wù)置一個取消標志奈揍, 正在執(zhí)行的任務(wù)在合適的時候檢測到此標志后會主動退出; 但如果該任務(wù)沒有主動檢測到此標志就無法正常退出赋续, 此時就需要使用pg_terminate_backend命令來中止SQL命令的執(zhí)行男翰。
通常先查詢pg_stat_activity以找出長時間運行的SQL命令, 命令如下:
select pid,usename,query_start, query from pg_stat_activity;
然后再使用pg_cancel_backend()取消該SQL命令纽乱, 如果pg_cancel_backend()取消失敗蛾绎,再使用pg_terminate_backend(), 命令如下:
select pg_cancel_backend(pid號);
select pg_terminate_backend(pid號);