postgres 常用查詢命令

查看等待事件
SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event is NOT NULL;

查看數據庫對應的base下的目錄:
select oid,datname from pg_database ;

看是否爲備庫:
select pg_is_in_recovery();
查看備庫流複製信息。
select pid,state,client_addr,sync_priority,sync_state from pg_stat_replication;
查看備庫落後主庫多少字節。
select pg_xlog_location_diff(pg_current_xlog_location(),replay_location) from pg_stat_replication;
 查看所有用戶。
cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"|"$3"|"$4 }'|more

1、查詢表中存在的鎖
select a.locktype,a.database,a.pid,a.mode,a.relation,b.relname
from pg_locks a
join pg_class b on a.relation = b.oid
where upper(b.relname) = 'TABLE_NAME';
2、查看數據庫實例的版本
select version();

3、查看數據庫的啓動時間:
select pg_postmaster_start_time();

4、查看最後load配置文件的時間:
select pg_conf_load_time();

5、使用pg_ctl reload 改變配置的裝載時間:
pg_ctl reload
select pg_conf_load_time();

6、顯示當前數據庫時區:
show timezone;

7、查看當前實例有哪些數據庫。
psql -l 或者在數據庫中  \l

8、查看當前用戶名
select  user;
select current_user;

9、查看session用戶
select session_user;

10、查詢當前session所在客戶端的IP地址及端口:
select inet_client_addr(),inet_client_port();

11、查詢當前數據庫服務器的IP地址及端口:
select inet_server_addr(),inet_server_port();

12、查詢當前session的後臺服務進程的pid
select pg_backend_pid();

13、查看當前的一些參數配置情況
show shared_buffers;
select current_setting('shared_buffers');
14、修改當前session的參數配置
set maintenance_work_mem to '128MB';
select set_config('maintenance_work_mem','128MB',false);

15、查看當前正在寫的WAL文件
select pg_xlogfile_name(pg_current_xlog_location());

16、查看當前WAL的buffer中還有多少字節的數據沒有寫到磁盤中
select pg_xlog_location_diff(pg_current_xlog_insert_location(),pg_current_xlog_location());

17、查看數據庫實例是否正在做基礎備份
select pg_is_in_backup(),pg_backup_start_time();

18、查看數據庫實例是Hot Standy 狀態還算是正常數據庫狀態
select pg_is_in_recovery();

19、
數據庫
select pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS size from pg_database;                     ---查看所有數據庫的大小。
表
 \d                                           ---查看數據庫的所有表
 \d a                                        -----查看錶的信息(如果表中有索引會在下面顯示索引的內容)
select pg_relation_size('a');    ----查看錶的大小
select pg_size_pretty(pg_relation_size('a'));    ------以kb、mb、gb的形式顯示錶的大小
select pg_size_pretty(pg_total_relation_size('a'));   -----表的總大小,包括索引的大小
索引
\di                                           -------查看數據庫的所有索引
select pg_size_pretty(pg_relation_size('a_index'));   -----查看索引大小
表空間 
 \db                                          ------查看所有的表空間以及表空間對應的目錄(pg_default、                               
                                                           pg_global爲默認的表空間在data目錄下)
select pg_size_pretty(pg_tablespace_size('pg_default'));       ----查看錶空間的大小
select pg_tablespace_size('pg_default')/1024/1024 as "SIZE M";  
查看錶對應的數據文件:
select pg_relation_filepath ('tablename');


系統維護的常用命令

修改配置文件postgresql.conf後,讓修改生效的方法有兩種:
方法一:在操作系統使用如下命令
pg_ctl reload
方法二:在psql中使用如下命令
select pg_reload_conf();
上述方法僅限於不需要重啓數據庫服務的參數


切換log日誌文件到下一個的命令
select pg_rotate_logfile();
切換WAL日誌文件的命令
select pg_switch_xlog();



查詢長時間運行的SQL
select pid,usename,query_start,query from pg_stat_activity;
取消SQL
select pg_cancel_backend(pid);
如果取消不了
select pg_terminate_backend(pid);


select pg_stop_backup();

以找出長時間運行的SQL
窗口一
testdb=# select pid,usename,query_start,query from pg_stat_activity;
 pid  | usename |          query_start          |                            query                            
------+---------+-------------------------------+-------------------------------------------------------------
 2637 | qwe     | 2017-02-20 11:47:04.190518+08 | select pid,usename,query_start,query from pg_stat_activity;
(1 row)


testdb=# select pg_sleep(300);

(執行此步驟之後光標會一直停留,查詢在後臺運行)
窗口二:
testdb=#  select pid,usename,query_start,query from pg_stat_activity;
 pid  | usename |          query_start          |                            query                            
------+---------+-------------------------------+-------------------------------------------------------------
 2637 | qwe     | 2017-02-20 12:08:32.731631+08 | select pg_sleep(300);
 5629 | qwe     | 2017-02-20 12:08:56.019362+08 | select pid,usename,query_start,query from pg_stat_activity;
(2 rows)

testdb=# select pg_cancel_backend(567);       發送取消執行標誌
WARNING:  PID 567 is not a PostgreSQL server process
 pg_cancel_backend 
-------------------
 f
(1 row)

testdb=# select pg_cancel_backend(2637);
 pg_cancel_backend 
-------------------
 t
(1 row)

testdb=#  select pid,usename,query_start,query from pg_stat_activity;
 pid  | usename |          query_start          |                            query                            
------+---------+-------------------------------+-------------------------------------------------------------
 2637 | qwe     | 2017-02-20 12:08:32.731631+08 | select pg_sleep(300);
 5629 | qwe     | 2017-02-20 12:09:46.648482+08 | select pid,usename,query_start,query from pg_stat_activity;
(2 rows)
可以發現進程沒有接受標誌,即未成功取消
testdb=# select pg_terminate_backend(2637);     終止後臺進程
 pg_terminate_backend 
----------------------
 t
(1 row)

testdb=#  select pid,usename,query_start,query from pg_stat_activity;
 pid  | usename |          query_start          |                            query                            
------+---------+-------------------------------+-------------------------------------------------------------
 5629 | qwe     | 2017-02-20 12:10:22.936444+08 | select pid,usename,query_start,query from pg_stat_activity;
(1 row)

成功取消查詢

進入窗口1查看狀態

pg_cancel_backend(pid)  取消正在執行的SQL語句。發送的是一個標誌,需要
pg_terminate_backend(pid)   終止一個後臺服務進程,同時 釋放次後臺服務進程的資源



解壓目錄下:/tmp/postgresql-9.4.4/contrib   放着很多工具,   直接make+make install   
然後select * from pg_available_extensions;查看安裝的擴展工具  
create extension 名字;      安裝外部工具
testdb=# create extension chkpass;
CREATE EXTENSION

發佈了18 篇原創文章 · 獲贊 8 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章