Ponieważ próbujesz wykonać dropDb
polecenie na bazie danych, z którą masz otwarte połączenie.
Zgodnie z dokumentacją postgres:
Ma to sens, ponieważ gdy usuniesz całą bazę danych, wszystkie otwarte połączenia odwołujące się do tej bazy danych stają się nieważne, więc zalecanym podejściem jest połączenie z inną bazą danych i ponowne wykonanie tego polecenia.
Jeśli masz do czynienia z sytuacją, w której inny klient jest podłączony do bazy danych i naprawdę chcesz usunąć bazę danych, możesz wymusić odłączenie wszystkich klientów od tej konkretnej bazy danych.
Na przykład, aby wymusić odłączenie wszystkich klientów od bazy danych mydb
:
Jeśli PostgreSQL <9.2
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb';
Inne
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';
Uwaga: To polecenie wymaga uprawnień superużytkownika.
Następnie możesz połączyć się z inną bazą danych i uruchomić dropDb
polecenie ponownie.