1. ホーム
  2. postgresql

[解決済み] Postgresql - DBへの自動接続があるため、データベースを削除できない。

2022-02-25 19:38:22

質問

データベースを削除しようとすると、必ず次のようなメッセージが表示されます。

ERROR:  database "pilot" is being accessed by other users
DETAIL:  There is 1 other session using the database.

私が使う場合

SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB';

そのDBからの接続を終了させたのですが、その後データベースを落とそうとすると、なぜか誰かが自動的にそのデータベースに接続し、このエラーを出します。何が原因なのでしょうか? このデータベースは私以外誰も使っていません。

どうすればいいですか?

今後接続できないようにすることができます。

REVOKE CONNECT ON DATABASE thedb FROM public;

(および他のユーザー/ロールの可能性もあります。 \l+psql )

そして、自分以外のこのデータベースへの接続をすべて終了させることができます。

SELECT pid, pg_terminate_backend(pid) 
FROM pg_stat_activity 
WHERE datname = current_database() AND pid <> pg_backend_pid();

古いバージョンでは pid と呼ばれていました。 procpid ので、それに対応する必要があります。

を取り消したので CONNECT の権利により、自動接続を行おうとしていたものは、もう行えないはずです。

これでDBを落とせるようになります。

通常の操作でスーパーユーザー接続を使用している場合はうまくいきませんが、その場合はまずその問題を解決する必要があります。


データベースの削除が完了した後、再度データベースを作成する場合は、以下のコマンドを実行することで、アクセス権を復元することができます。

GRANT CONNECT ON DATABASE thedb TO public;