如何用单条Debian Shell命令终止PostgreSQL指定数据库的其他会话
单条Debian Shell命令实现PostgreSQL数据库删除重建(解决连接占用问题)
错误原因
你之前的命令报错是因为直接将SQL语句作为su -c的参数时,Shell会把SQL中的括号、<>等符号当作特殊语法解析,导致语法错误。必须通过psql命令来执行SQL语句,同时正确转义引号避免解析冲突。
正确的单条命令
仅终止目标数据库的所有连接
su - postgres -c "psql -c \"SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'imedig-cloud' AND pid <> pg_backend_pid();\""
终止连接+删除+重建数据库(完整流程)
如果要一步完成终止连接、删除原有数据库并重建,使用这条命令:
su - postgres -c "psql -c \"SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'imedig-cloud' AND pid <> pg_backend_pid();\" && psql -c \"DROP DATABASE IF EXISTS \\\"imedig-cloud\\\";\" && psql -c \"CREATE DATABASE \\\"imedig-cloud\\\";\""
说明
- 用
psql -c包裹SQL语句,确保SQL能被PostgreSQL正确执行,而非被Shell解析 - 双引号需要用
\转义,避免Shell提前截断命令 &&用于保证前一步命令执行成功后,再执行后续步骤
内容的提问来源于stack exchange,提问作者Donald Yañez
相关产品推荐
相关产品推荐

