类似mysql那样执行sql语句_查询postgresql正在处理的sql语句进程,类似于mysql的show processlist...

查询正在执行的sqlSELECT pid, datname AS db, query_start AS start, now() - query_start AS lap, query FROM pg_stat_activity

WHERE state <> 'idle' and query not like '%pg_stat_activity%'

and (now() - query_start) > interval '10 seconds';

kill正在执行的sql

kill有两种方式,第一种是:SELECT pg_cancel_backend(PID);

这种方式只能kill select查询,对update、delete 及DML不生效)

第二种是:SELECT pg_terminate_backend(PID);

这种可以kill掉各种操作(select、update、delete、drop等)操作

查看锁的持有情况WITH

t_wait AS (

SELECT

a.mode,a.locktype,a.databASe,a.relation,a.page,a.tuple,a.clASsid,a.granted,

a.objid,a.objsubid,a.pid,a.virtualtransaction,a.virtualxid,a.transactionid,a.fAStpath,

b.state,b.query,b.xact_start,b.query_start,b.usename,b.datname,b.client_addr,b.client_port,b.application_name

FROM pg_locks a,pg_stat_activity b

WHERE a.pid=b.pid AND NOT a.granted

),

t_run AS

(

SELECT

a.mode,a.locktype,a.databASe,a.relation,a.page,a.tuple,a.clASsid,a.granted,

a.objid,a.objsubid,a.pid,a.virtualtransaction,a.virtualxid,a.transactionid,a.fAStpath,

b.state,b.query,b.xact_start,b.query_start,b.usename,b.datname,b.client_addr,b.client_port,b.application_name

FROM pg_locks a,pg_stat_activity b

WHERE a.pid=b.pid AND a.granted

),

t_overlap AS

(

SELECT r.*

FROM t_wait w

JOIN t_run r ON

(

r.locktype IS NOT DISTINCT FROM w.locktype

AND r.databASe IS NOT DISTINCT FROM w.databASe

AND r.relation IS NOT DISTINCT FROM w.relation

AND r.page IS NOT DISTINCT FROM w.page

AND r.tuple IS NOT DISTINCT FROM w.tuple

AND r.virtualxid IS NOT DISTINCT FROM w.virtualxid

AND r.transactionid IS NOT DISTINCT FROM w.transactionid

AND r.clASsid IS NOT DISTINCT FROM w.clASsid

AND r.objid IS NOT DISTINCT FROM w.objid

AND r.objsubid IS NOT DISTINCT FROM w.objsubid

AND r.pid <> w.pid

)

),

t_all AS

(

SELECT r.* FROM t_overlap r

UNION ALL

SELECT w.* FROM t_wait w

)

SELECT

locktype,datname,relation::regclASs,page,tuple,virtualxid,transactionid::text,clASsid::regclASs,objid,objsubid,

STRING_AGG('Pid: '||CASE WHEN pid IS NULL THEN 'NULL' ELSE pid::text END||chr(10)

||'Lock_Granted: '||CASE WHEN granted IS NULL THEN 'NULL' ELSE granted::text END

||' , Mode: '||CASE WHEN mode IS NULL THEN 'NULL' ELSE mode::text END

||' , FAStPath: '||CASE WHEN fAStpath IS NULL THEN 'NULL' ELSE fAStpath::text END

||' , VirtualTransaction: '||CASE WHEN virtualtransaction IS NULL THEN 'NULL' ELSE virtualtransaction::text END

||' , Session_State: '||CASE WHEN state IS NULL THEN 'NULL' ELSE state::text END||chr(10)

||'Username: '||CASE WHEN usename IS NULL THEN 'NULL' ELSE usename::text END

||' , DatabASe: '||CASE WHEN datname IS NULL THEN 'NULL' ELSE datname::text END

||' , Client_Addr: '||CASE WHEN client_addr IS NULL THEN 'NULL' ELSE client_addr::text END

||' , Client_Port: '||CASE WHEN client_port IS NULL THEN 'NULL' ELSE client_port::text END

||' , Application_Name: '||CASE WHEN application_name IS NULL THEN 'NULL' ELSE application_name::text END||chr(10)

||'Xact_Start: '||CASE WHEN xact_start IS NULL THEN 'NULL' ELSE xact_start::text END

||' , Query_Start: '||CASE WHEN query_start IS NULL THEN 'NULL' ELSE query_start::text END

||' , Xact_Elapse: '||CASE WHEN (now()-xact_start) IS NULL THEN 'NULL' ELSE (now()-xact_start)::text END

||' , Query_Elapse: '||CASE WHEN (now()-query_start) IS NULL THEN 'NULL' ELSE (now()-query_start)::text END||chr(10)

||'SQL (Current SQL in Transaction): '||chr(10)||CASE WHEN query IS NULL THEN 'NULL' ELSE query::text END

, chr(10)||'--------'||chr(10)||'*+*+*+*+*+*+'||chr(10)

ORDER BY

(CASE mode

WHEN 'INVALID' THEN 0

WHEN 'AccessShareLock' THEN 1

WHEN 'RowShareLock' THEN 2

WHEN 'RowExclusiveLock' THEN 3

WHEN 'ShareUpdateExclusiveLock' THEN 4

WHEN 'ShareLock' THEN 5

WHEN 'ShareRowExclusiveLock' THEN 6

WHEN 'ExclusiveLock' THEN 7

WHEN 'AccessExclusiveLock' THEN 8

ELSE 0

END) desc,

chr(10)||'*1*+*1*+*+*+'||chr(10),

(CASE WHEN granted THEN 0 ELSE 1 END)

) AS lock_conflict

FROM t_all

GROUP BY locktype,datname,relation,page,tuple,virtualxid,transactionid::text,clASsid,objid,objsubid;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将 MySQL 的 .sql 文件转化成 PostgreSQL 的 .sql 文件,可以通过以下步骤: 1. 打开命令行界面,并确保已经安装了 PostgreSQL 数据库。 2. 将 MySQL 的 .sql 文件拷贝到 PostgreSQL 数据库服务器上,可以通过文件传输工具(如 scp)或共享文件夹等方式进行。 3. 登录到 PostgreSQL 数据库服务器的命令行界面中,可以使用 psql 命令。 4. 创建一个新的 PostgreSQL 数据库,可以使用命令 `CREATE DATABASE your_database_name;` 进行创建,将 "your_database_name" 替换为你想要的数据库名称。 5. 选择要导入数据的数据库,可以使用命令 `\c your_database_name;` 进行选择,将 "your_database_name" 替换为你刚刚创建的数据库名称。 6. 导入 MySQL 的 .sql 文件到 PostgreSQL 数据库中,可以使用以下命令: ```bash psql -U your_username -d your_database_name -f path_to_mysql_sql_file.sql ``` 将 "your_username" 替换为你的数据库用户名,将 "your_database_name" 替换为你刚刚创建的数据库名称,将 "path_to_mysql_sql_file.sql" 替换为你拷贝到 PostgreSQL 数据库服务器上的 MySQL .sql 文件的路径。 7. 等待导入过程完成,根据 .sql 文件的大小和数据库的性能,导入过程可能需要一些时间。 8. 导入完成后,你就可以在 PostgreSQL 数据库中使用转化后的数据了。 请注意,虽然 PostgreSQLMySQL 都是关系型数据库,但两者的语法和特性上有一些差异,因此 .sql 文件在转化过程中可能需要进行一些手动调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值