Postgre使用


  1. 查看正在执行的SQL

SELECT procpid, start, now() - start AS lap, current_query 
FROM 
    (SELECT backendid, pg_stat_get_backend_pid(S.backendid) AS procpid, 
        pg_stat_get_backend_activity_start(S.backendid) AS start, 
       pg_stat_get_backend_activity(S.backendid) AS current_query 
    FROM 
        (SELECT pg_stat_get_backend_idset() AS backendid) AS S 
    ) AS S 
WHERE current_query <> '
ORDER BY  lap DESC;

procpid:进程id
start:进程开始时间
lap:经过时间
current_query:执行中的sql

--------------

select * from pg_stat_activity where state = 'active' and usename = 'gf_app' order by query_start limit 1;   ---慢查询

select * from pg_stat_activity where state = 'active' and query like '%CREATE INDEX%';

select datname,query from pg_stat_activity where state = 'active' and backend_start < '2021-08-31 14:27';

---------------

2.怎样停止正在执行的sql
     SELECT pg_cancel_backend(进程id);

     SELECT pg_terminate_backend(PID);

或者用系统函数  kill -9 进程id;

3.任务重跑过程中正在建索引,在调度杀掉后还需要干预db

4.ERROR: execute cannot be used while an asynchronous query is underway。断开连接重新执行

4.查看表结构:

SELECT 
a.attname as 字段名, 
format_type(a.atttypid,a.atttypmod) as 类型, 
a.attnotnull as 非空, 
col_description(a.attrelid,a.attnum) as 注释 
FROM pg_class as c,pg_attribute as a 
WHERE
a.attrelid = c.oid 
and a.attnum>0 
and c.relname = '表名';