Upuść bazę danych postgresql przez wiersz poleceń [zamknięty]

Próbuję upuścić bazę danych i utworzyć nową za pomocą wiersza poleceń. Loguję się za pomocą PSQL-U username, a następnie wykonuję \connect template1, a następnie DROP DATABASE databasename;

Pojawia się błąd "nazwa bazy danych jest dostępna dla innych użytkowników". Wyłączyłem Apache i próbowałem tego i nadal dostaję ten błąd. Czy robię coś nie tak?

Author: wonea, 2011-08-16

4 answers

Możesz uruchomić polecenie dropdb z linii poleceń:

dropdb 'database name'

Zauważ, że musisz być superużytkownikiem lub właścicielem bazy danych, aby móc ją upuścić.

Możesz również sprawdzić Widok pg_stat_activity, aby zobaczyć, jaki rodzaj aktywności ma obecnie miejsce w Twojej bazie danych, w tym wszystkie bezczynne procesy.

SELECT * FROM pg_stat_activity WHERE datname='database name';
 353
Author: csano,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-18 14:31:18

To mi pomogło:

select pg_terminate_backend(pid) from pg_stat_activity where datname='YourDatabase';

Dla postgresql wcześniej niż 9.2 zamień pid na procpid

DROP DATABASE "YourDatabase";

Http://blog.gahooa.com/2010/11/03/how-to-force-drop-a-postgresql-database-by-killing-off-connection-processes/

 92
Author: Eugene,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-22 09:40:08

Spróbuj tego. Zauważ, że nie ma określonej bazy danych-po prostu działa "na serwerze"

psql -U postgres -c "drop database databasename"

Jeśli to nie zadziala, widzialem problem z postgresem trzymajacym sie osieroconych gotowych wypowiedzi.
Aby je wyczyścić, zrób to:

SELECT * FROM pg_prepared_xacts;

Następnie dla każdego identyfikatora, który widzisz, uruchom to:

ROLLBACK PREPARED '<id>';
 53
Author: Bohemian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-16 06:17:52

Kiedy mówi, że użytkownicy są połączeni, co mówi zapytanie " select * from pg_stat_activity;"? Czy inni użytkownicy oprócz ciebie są teraz podłączeni? Jeśli tak, być może będziesz musiał edytować swój pg_hba.plik conf, aby odrzucić połączenia od innych użytkowników lub zamknąć dowolną aplikację uzyskującą dostęp do bazy danych pg, aby móc ją upuścić. Mam ten problem od czasu do czasu w produkcji. Ustaw pg_hba.conf aby mieć dwie linie takie jak Ta:

local   all         all                               ident
host    all         all         127.0.0.1/32          reject

I powiedz pgsql, aby przeładował lub zrestartował (tj. albo sudo / etc / init.d / postgresql reload lub pg_ctl reload) i teraz jedynym sposobem na połączenie się z Twoją maszyną są gniazda lokalne. Zakładam, że jesteś na Linuksie. Jeśli nie, może być konieczne dostosowanie do czegoś innego niż local / ident w pierwszej linii, do czegoś takiego jak host ... Twoje imię.

Teraz powinieneś być w stanie zrobić:

psql postgres
drop database mydatabase;
 12
Author: Scott Marlowe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-17 03:10:35