5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【docker】データベースに接続中のセッションを強制切断する方法【Postgres】

Posted at

Rails db:migrate:resetしようとしたら見たこともないエラーが出てきて少し詰まったので、ここで解決方法を共有したいと思います。

ERROR!
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 したら無事通りました!

しかし、調べても何故他のユーザーが接続中になってしまったのか不明なので、もしわかる方いましたらコメントいただけますと幸いです!!

##最後まで読んでいただきありがとうございます!
ほぼ毎日、個人開発する中で詰まったことをアウトプットしています。ご指摘などあればコメントいただけますと嬉しいです!

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?