답변:
다음은 StackOverflow 에서 매우 비슷한 질문 에 대한 답변 입니다.
postgresql 버전에 따라 버그가 발생 pg_stat_activity
하여 삭제 된 사용자의 활성 연결이 생략 될 수 있습니다. 이 연결은 pgAdminIII 내부에도 표시되지 않습니다.
자동 테스트를 수행하는 경우 (사용자도 작성) 이는 가능한 시나리오 일 수 있습니다.
이 경우 다음과 같은 쿼리로 되돌려 야합니다.
SELECT pg_terminate_backend(pg_stat_activity.procpid)
FROM pg_stat_get_activity(NULL::integer)
WHERE datid=(SELECT oid from pg_database where datname = 'your_database');
이와 같은 쿼리가 도움이 될 것입니다 (데이터베이스 이름이 'db'라고 가정).
select pg_terminate_backend(pid) from pg_stat_activity where datname='db';
pid
호출하는 데 사용 procpid
하면 9.2 이전의 포스트 그레스의 버전을 사용하는 그렇다면 당신은 다음을 시도해 볼 수도 있습니다 :
select pg_terminate_backend(procpid) from pg_stat_activity where datname='db';
그러나 다른 사용자를 연결 해제하려면 수퍼 유저 여야합니다.
또한 REVOKE CONNECT ON DATABASE FROM PUBLIC
비슷하거나 비슷한 것이 유용 할 수 있습니다 GRANT
.
클라이언트 연결에서 데이터베이스를 "비우기"위해 예를 들어 이름을 바꿀 수 있습니다.
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname='current_db';
ALTER DATABASE current_db RENAME TO old_db;
ALTER DATABASE new_db RENAME TO current_db;
이로 인해 클라이언트 앱에 문제가 발생할 수 있습니다. 트랜잭션 사용으로 인해 데이터가 실제로 중단되지 않아야합니다.