Postgresql - DBへの自動接続があるためデータベースを削除できません 質問する

Postgresql - DBへの自動接続があるためデータベースを削除できません 質問する

データベースを削除しようとすると、次のエラーが発生します。

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;

おすすめ記事