スクールでの頻出エラー

2022年3月18日

[スクールでよくある質問]他にデータベースにアクセスしているユーザとは?データベースリセットのエラーでの質問

Ruby on Railsにて、DB(データベース)操作を行う際に発生することのある”PG::ObjectInUse: ERROR: database “sample_development” is being accessed by other users”のエラーについて解説します。
確認方法を忘れてしまう方も多いので、覚えておきましょう。

学習時の状況やレベル

  • 学習時期:Rails学習1〜2ヶ月目
  • 受講生が既に学んでいること:基礎文法を一度学んだ

こんにちは!

ディープロの齊藤です!

今回は受講生さん達の中でも定期的に発生する"PG::ObjectInUse: ERROR: database “sample_development” is being accessed by other users"のエラーを紹介します。

スクールでのとある質問やりとり

データベース削除しようとしたらエラー出が出てしまいました…

該当のエラー

PG::ObjectInUse: ERROR: database “sample_development” is being accessed by other users
~省略~
There is 1 other session using the database.

では確認してみましょう。

お願いします!

● データベースに他のユーザがアクセスしている
● 他のセッションがデータベースを使っている
ということですね!

ちょっと意味わからないです…

他のユーザがアクセスしているとか他のセッションとか言われても、確かにわかりづらいですね。
どのユーザがデータベースにアクセスしているか見てみましょう。

どうやって確認するのでしょうか?

このコマンドを使用してデータベースにアクセスしているユーザを確認していきます!

$ psql -d sample_development

# select * from pg_stat_activity;
datname usename application_name backend_start
sample_development postgresql DBeaver 7.1.5 - Main sample_development 2022-03-11 15:26:25
sample_development hanako psql 2022-02-28 11:55:31

DBeaverというapplicationがあるけど心当たりはありますか?

これはデータベースの中身を確認するGUIのツールですね!最近よく使っています!

なるほど。
一度そのアプリケーションを閉じてデータベース削除できるか試してみてください!

やってみます! …消えました! このアプリが原因だったんですね!

そうですね。
同じデータベースに別アプリケーションからアクセスしていたものが、別セッションになっていた。
これが別ユーザがアクセスしているとみなされているということだね。

なるほど〜 これからも同じエラーが発生したら確認してみます!ありがとうございました!

まとめ

  • RailsでDB(データベース)に変更を加える際は、他のアプリケーションで同じDBに他のUserがアクセスしていないか確認する
  • 心当たりがない場合は、下記コマンドで接続状態を確認する。
$ psql -d sample_development
# select * from pg_stat_activity;


ダイビックのことをもっと知ってみませんか?