PostgreSQLエラー「dropdb: database removal failed: ERROR」の原因と解決方法
LinuxのコンソールなどでPostgreSQLのデータベースを削除するために「dropdb」コマンドを実行した際、削除したいデータベースを削除できない(削除に失敗する)場合がある。
以下は、dropdbコマンドでデータベース「nobuneko」を削除しようとした時に削除できなかった例。
dropdb -U postgres nobuneko
dropdb: database removal failed: ERROR: database "nobuneko" is being accessed by other users
エラーメッセージは、他のユーザがデータベース「nobuneko」にアクセス中であるため、データベースの削除に失敗しました、という意味だ。
このエラーが出た場合、何らかの手段で誰かが削除したいデータベースに接続したままになっている。
CSEなどで接続しているのであれば、接続を切断するとエラーが出なくなり、削除できるようになる。どうしても接続が切れない場合(つまり、何がデータベースに接続しているかの原因などが分からない場合)、PostgreSQLをいったん停止すれば、確実に接続は切れる。
《参考》
/etc/rc.d/init.d/postgresql stop ※PostgreSQLの停止
/etc/rc.d/init.d/postgresql start ※PostgreSQLの起動
削除したいデータベースにアクセスしているユーザがいなくなれば、dropdbコマンドを実行しても「dropdb: database removal failed: ERROR」というエラーが出なくなり、削除したいデータベースを削除できる。