postgresqlのセッションを切断

テストが実行できなくなってしまい、焦ることがありました。

 

ターミナル再起動しても相変わらずテストが実行されないままでした。

 

rake db:resetしようと試みてもエラーでリセットできませんでした。

しかし、ログをたどっていったところ、どうやらポスグレのセッションが何個も立ち上がり過ぎてしまっていることが良くなさそうだと思い、スレッドのセッションを切ることにしました。

その方法を書き留めておきます。

 

 

セッションを調べる

psql -d DB名 というコマンドでポスグレのコンソールに接続後、以下のコマンドでセッション一覧を表示させます。

SELECT pid FROM pg_stat_activity where pid <> pg_backend_pid();

 

$ psql -d hoge_test
psql (11.1)
Type "help" for help.

hoge_test=# SELECT pid FROM pg_stat_activity where pid <> pg_backend_pid();
pid
------
1388
1390
1264
1812
3039
1033
1550
1040
3146
2418
3279
1386
1385
1387
(14 rows)

 

セッションを切断する

以下のコマンドでセッションを切断します。

SELECT pg_terminate_backend(pidの番号);

 

  hoge_test=# SELECT pg_terminate_backend(1388);
pg_terminate_backend
----------------------
t
(1 row)

 

これで無事テストが動いてくれるようになりました!!

 

 

感想その他

なぜこんなに余計なセッションが生まれてしまったのか原因が良くわかっておりません。。。

テストの中の "js: true" の記述によって新しいスレッドが立ち上がってしまっているっぽかったのですが、どうするのが正しいかは引き続き調べていきたいと思います。