Muszę zmienić nazwę bazy danych, ale kiedy to zrobiłem
PGAdmin : ALTER DATABASE "databaseName" RENAME TO "databaseNameOld"
, powiedział mi, że nie może.
Jak mogę to zrobić?
( Wersja 8.3 na WindowsXP )
Aktualizacja
Pierwszy komunikat o błędzie: Nie można, ponieważ byłem z nim połączony. Więc wybrałem inną bazę danych i wykonałem zapytania.
Otrzymuję drugi komunikat o błędzie z informacją, że nastąpiło połączenie użytkownika. Widzę na
PGAdmin
ekranie, że ma ich wiele,PID
ale są nieaktywne ... Nie wiem, jak je zabić.
sql
postgresql
Patrick Desjardins
źródło
źródło
Odpowiedzi:
Staraj się nie cytować nazwy bazy danych:
Upewnij się również, że w danym momencie nie ma innych klientów połączonych z bazą danych. Na koniec spróbuj opublikować komunikat o błędzie, który zwraca, abyśmy mogli uzyskać więcej informacji.
źródło
.
lub@
.-
Na przyszłość powinieneś umieć:
Zauważ, że
pg_stat_activity
kolumna tabelipid
została nazwana tak, jakprocpid
w wersjach wcześniejszych niż 9.2. Więc jeśli twoja wersja PostgreSQL jest niższa niż 9.2, użyjprocpid
zamiastpid
.źródło
PostgreSQL 9.3.5 on x86_64-apple-darwin, compiled by i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00), 64-bit
)Właśnie natknąłem się na to, a poniżej działa:
1)
pgAdmin
jest jedną z sesji. Użyjpsql
zamiast tego.2) Zatrzymaj usługi
pgBouncer
i / lub usługi harmonogramu w systemie Windows, ponieważ te również tworzą sesjeźródło
Unexist powiedział mi w komentarzu, żebym zrestartował bazę danych i to działa! Ponowne uruchomienie bazy danych zabija wszystkie istniejące połączenia, a następnie łączę się z inną bazą danych i mogłem zmienić jej nazwę za pomocą mojego początkowego zapytania.
Dzięki wszystkim.
źródło
Zamiast wdrożyć nuke (zrestartować serwer), powinieneś spróbować zamknąć te połączenia, które ci przeszkadzają, albo znajdując skąd one pochodzą i zamykając procesy klienta, albo używając tej
pg_cancel_backend()
funkcji.źródło
Dla każdego, kto napotka ten problem przy użyciu DBeavera i otrzyma taki komunikat o błędzie:
Odłącz bieżące połączenie i połącz się ponownie z tym samym serwerem, korzystając z połączenia, które nie jest przeznaczone dla bazy danych, której nazwę zmieniasz.
Zmiana aktywnej bazy danych nie wystarczy.
źródło