1.背景
线上服务器每月都会创建下一个月的数据表的分区表,但是表在使用的时候创建分区容易造成锁表,所有自动化实现kill掉数据库中锁表的语句。
2.脚本内容
pid=`echo "SELECT * FROM pg_stat_activity where wait_event_type = 'Lock';" | docker exec -i postgres psql -p 5432 -U postgres --db 'test' | awk '{if (NR>2){print $5}}' | awk 'NR>1{print line}{line=$0}' | awk 'NR>1{print line}{line=$0}'`
echo 'Lock sql pid is '$pid
for i in $pid
do
echo "SELECT pg_terminate_backend("$i");" | docker exec -i postgres psql -p 5432 -U postgres --db 'test'
done