一、進程:
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 ;