Database is being accessed by other users. There are other sessions using the database.
Podczas wykonywania operacji na bazie danych, które wymagają wyłączności dostępu możecie otrzymać komunikat w postaci:
ERROR: database "stara_baza" is being accessed by other users DETAIL: There are 2 other sessions using the database.
Dla przykładu, taki komunikat możecie zobaczyć przy próbie zmiany nazwy bazy danych
ALTER DATABASE "stara_baza" RENAME TO "nowa_baza";
Błąd jasno mówi nam o tym, że nie możemy zmienić nazwy bazy danych, gdyż istnieją dwie inne sesje połączenia do bazy. To właśnie one blokują nam wykonanie takiej operacji.
W jaki sposób sprawdzć jakie sesje wiszą opiszę w kolejny wpisie, tymczasem zajmiemy się ich rozłączeniem.
Wykorzystamy do tego REVOKE CONNECT
którego składnia jest następująca:
REVOKE CONNECT ON DATABASE "nazwa_bazy_danych" FROM PUBLIC;
Dla naszej przykładowej bazy danych o nazwie: stara_baza
będzie to zatem:
REVOKE CONNECT ON DATABASE "stara_baza" FROM PUBLIC;
Po wykonaniu powyższego polecenia powinniśmy otrzymać zwrotnie komunikat: REVOKE
.
Jeżeli w między czasie nikt się nie dołączy powinniśmy móc teraz wykonać naszą operację, np. zmianę nazwy bazy danych:
ALTER DATABASE "stara_baza" RENAME TO "nowa_baza";
i w przypadku sukcesu otrzymać komunikat: ALTER DATABASE
.