データベースを削除しようとすると、次のエラーが発生します。
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 からの接続を終了しましたが、その後データベースを削除しようとすると、何らかの理由で誰かがそのデータベースに自動的に接続し、このエラーが発生します。何が原因でしょうか? 私以外にこのデータベースを使用する人はいません。
ベストアンサー1
Postgres 13以上
使用WITH (force)
見るhttps://stackoverflow.com/a/68982312/398670その代わり
Postgres 12 以前
今後の接続を禁止するには、次の操作を行います。
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;