Rails db:migrate:resetしようとしたら見たこともないエラーが出てきて少し詰まったので、ここで解決方法を共有したいと思います。
ERROR: database "hoge_development" is being accessed by other users
DETAIL: There are 1 other sessions using the database.
どうしてこうなったのかはググっても正直よくわからなかったのですが、どうやら他のユーザーで接続しっぱなしになってしまい、dbコンテナにアクセスできない状態になってしまったようです。
コンテナの中に入り、PostgreSQLに接続し、接続を強制削除する必要があります。
【環境】
- Rails 6.0.3
- Ruby 2.7.1
- PostgreSQL 13.0
- Node.js 10.21.0
- Yarn 1.22.5
- Bundler 2.1.4
- Redis 6.0.8
- Docker for window
- windows10 Pro
##解決手順
まず、dbコンテナに入ります。
$ docker exec -it hoge_db_1 bash
root@xxxxxaf78adb:/#
コンテナに入ったら、PostgreSQLに接続します。
root@xxxxxaf78adb:/# psql -U postgres
PostgreSQLに接続したら、接続中のユーザのpidを以下のコマンドで表示します。
postgres=# SELECT pid FROM pg_stat_activity where pid <> pg_backend_pid();
pid
-------
144
29
28
27
(4 rows)
↑で4つ出てきたので、以下のコマンドを順番に一個づつ実行して全て切断します。
SELECT pg_terminate_backend(144);
pg_terminate_backend
----------------------
t
(1 row)
SELECT pg_terminate_backend(29);
pg_terminate_backend
----------------------
t
(1 row)
(省略)
これを行い、コンテナから出てdocker-compose exec web rails db:migrate:reset
したら無事通りました!
しかし、調べても何故他のユーザーが接続中になってしまったのか不明なので、もしわかる方いましたらコメントいただけますと幸いです!!
##最後まで読んでいただきありがとうございます!
ほぼ毎日、個人開発する中で詰まったことをアウトプットしています。ご指摘などあればコメントいただけますと嬉しいです!