pg常用命令

一、進程:
1)查詢進程:
select * from pg_stat_activity;

說明:
datname表示數據庫名
procpid表示當前的SQL對應的PID
query_start表示SQL執行開始時間
current_query表示當前執行的SQL語句
waiting表示是否正在執行,t表示正在執行,f表示已經執行完成
client_addr表示客戶端IP地址

2)kill進程:
kill有兩種方式,第一種是:
SELECT pg_cancel_backend(PID);
這種方式只能kill select查詢,對update、delete 及DML不生效)

第二種是:
SELECT pg_terminate_backend(PID);
這種可以kill掉各種操作(select、update、delete、drop等)操作
select 'SELECT pg_terminate_backend('||pid||');' from pg_stat_activity

注意:如果從OS上使用kill命令殺PG應用進程:
1.會導致應用所有連接中斷,無論連接到哪個database;
2.PG後臺進程除了logger process,其他也都會退出重啓,並且進行恢復;
所以直接調用OS kill是非常危險的操作。


2)查詢連接數
SELECT count(*) FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;
 count
-------
   488
(1 row)


二、授權

1)sequence授權,跟table授權有區別
grant usage,select on sequence  <sequence_name>  to  <role>;


三、查詢size

1、sql查詢
postgres=# select pg_size_pretty(pg_database_size('postgres'));

2 、linux du查詢
postgres=# SELECT oid from pg_database where datname='postgres';
oid
-------
 21360


查看名稱爲21360的文件的大小即是數據庫postgres的大小;
linux可以以下命令替代
[hostname 21360]# cd /postgres/data/base/21360
[hostname 21360]# du -sh


四、解鎖,注意要先連接到表所在的database
\c &dbname
select distinct a.relname,b.pid from pg_class a,pg_locks b where a.oid=b.relation and b.granted=true and a.relname like '%&table_name%';
select pg_terminate_backend(&pid);


五查詢哪些表佔用的空間大。

SELECT   table_schema || '.' || table_name AS table_full_name, 
pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')) AS size 
FROM information_schema.tables
where table_name like '%awr%' 
ORDER BY 
pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC ;






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