프로그래밍 언어/Database

활성 연결이있는 경우 PostgreSQL 데이터베이스를 삭제하는 방법

Rateye 2021. 6. 18. 10:24
728x90
반응형
질문 : 활성 연결이있는 경우 PostgreSQL 데이터베이스를 삭제하는 방법은 무엇입니까?

PostgreSQL 데이터베이스를 삭제하는 스크립트를 작성해야합니다. 많은 연결이있을 수 있지만 스크립트는이를 무시해야합니다.

표준 DROP DATABASE db_name 쿼리는 열린 연결이있는 경우 작동하지 않습니다.

문제를 어떻게 해결할 수 있습니까?

답변

다음을 제외한 기존 연결이 삭제됩니다.

pg_stat_activity 쿼리하고 죽이려는 pid 값을 SELECT pg_terminate_backend(pid int) 를 실행합니다.

PostgreSQL 9.2 이상 :

SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB' -- ← change this to your DB
  AND pid <> pg_backend_pid();

PostgreSQL 9.1 이하 :

SELECT pg_terminate_backend(pg_stat_activity.procpid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB' -- ← change this to your DB
  AND procpid <> pg_backend_pid();

모든 사람의 연결을 끊으면 연결을 끊고 드롭하려는 데이터베이스가 아닌 다른 데이터베이스의 연결에서 DROP DATABASE 명령을 실행해야합니다.

procpid 열의 이름이 pid procpid . 이 메일 링리스트 스레드를 참조하십시오.

출처 : https://stackoverflow.com/questions/5408156/how-to-drop-a-postgresql-database-if-there-are-active-connections-to-it
728x90
반응형