背景
为避免使用 Update
SQL语句误操作,造成生产事故。 使用 DBeaver
数据库客户端时,更改 连接设置
如下:常规
-> 连接类型
设置为 生产
。 (默认为 开发
)
设置连接类型为 生产
后,变更如下:
- 手动执行的
每一条SQL语句
都会加入待处理的事务
中 - 左上角方框中的
数字
,代表待处理事务
的SQL语句数
。若没有待处理的事务,则方框显示None
。 - 点击左上角的
提交
按钮,才会提交事务执行。 提交
前,若发现操作有误,可及时回滚
事务。
问题
执行了几个SQL语句,忘记点击 提交
按钮,被 事务锁
锁住。后面有的SQL语句执行时因此卡死。
排查被 事务锁
锁住的SQL语句如下所示:
SELECT locker.pid,
'SELECT pg_terminate_backend('||locker.pid||');' kill_pid,
pc.relname,
locker.mode,
locker_act.application_name,
least(query_start,xact_start) start_time,
CASE
WHEN locker.granted='f' THEN
'wait_lock'
WHEN locker.granted='t' THEN
'get_lock'
END lock_satus,current_timestamp - least(query_start,xact_start) AS runtime,
locker_act.query
FROM pg_locks locker,pg_stat_activity locker_act, pg_class pc
WHERE locker.pid=locker_act.pid
AND NOT locker.pid=pg_backend_pid()
AND application_name<>'pg_statsinfod'
AND locker.relation = pc.oid
AND pc.reltype<>0 --and pc.relname='t'
ORDER BY runtime desc;