1. ホーム
  2. PostgreSQL

PostgreSQL] アクティブリンクのあるデータベースを削除する方法

2022-03-01 01:41:08

実行すると

DROP DATABASE testdb;

と表示されることがあります。
ERROR: データベース "testdb" は他のユーザーによってアクセスされています。
詳細 このデータベースを使用している他のセッションは3つあります。

これは、データベースに接続している他のリンクが3つあるため、データベースの削除に失敗したことを意味します。また、削除するデータベースに対応するプロセスが接続されている場合、PostgreSQLは実行されません。

では、どうすればいいのか?

答えは、このデータベースへのリンクをすべて切断し、データベースを削除することです。どのように切断するのですか?PostgreSQL 9.2以降で、以下の文を実行します。

SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE datname='testdb' AND pid<>pg_backend_pid();

上記のステートメントを実行した後、DROPオペレーションを実行すると、データベースを削除することができます。

上記の文には

pg_terminate_backend: データベースへの接続のプロセスIDを終了させるために使用される関数です。

pg_stat_activity: サービスプロセスのプロパティとステータスを保存するシステムテーブルです。

pg_backend_pid(): は、現在のセッションに接続されているサーバプロセスのIDを取得するシステム関数です。