This SO answer pięknie wyjaśnia (pełny cytat z araqnid między zasad horyzontalnych, to znowu ja):
T O bazie znak jak nie przyjmowanie nowych połączeń „applogs”:
update pg_database set datallowconn = false where datname = 'applogs';
Inną możliwością byłoby odwołać „podłączyć” dostępu w bazie danych dla roli (ów) klienta.
Odłącz użytkowników od bazy danych = zabij backend. Tak aby odłączyć wszystkie innym użytkownikom „applogs” bazy danych, na przykład:
select pg_terminate_backend(procpid)
from pg_stat_activity
where datname = 'applogs' and procpid <> pg_backend_pid();
Po wykonaniu zarówno tych, jesteś jedynym użytkownikiem podłączony do 'applogs. Chociaż może rzeczywiście nastąpić opóźnienie, zanim backend faktycznie zakończy się rozłączeniem?
Aktualizacja z MarkJL: Jest rzeczywiście opóźnienie przed backendy zakończeniu odłączania.
Teraz ja znowu: Mimo to, należy pamiętać, że kolumna procpid
została przemianowana na pid
w PostgreSQL 9.2 i nowszych.
Uważam, że jest to o wiele bardziej pomocne niż odpowiedź Milena A. Radeva, która choć technicznie jest taka sama, nie zawiera przykładów użycia i sugestii z życia.
pg_cancel_backend() nie rozłącza, tylko anuluje bieżące zapytanie. Następne zapytanie może nadejść w dowolnej chwili, używając tego samego starego połączenia, które nadal tam jest. –
Naprawiono. Dziękuję Ci! –