Ruby

関連情報

初心者向け

初めて Ruby 学ぶためのノウハウをチュートリアル形式でまとめられたサイト(無料で質が高い)

Rails

PostgreSQL の DB リセットが上手くいかないときの対処法

  • PostgreSQL を利用している rails プロジェクトで CI 経由で DB をリセットするコードを書いたときに、以下のようなエラーが出るときがある
13:25:30 ActiveRecord::StatementInvalid: PG::ObjectInUse: ERROR: database "DB 名" is being accessed by other users 13:25:30 DETAIL: There is 1 other session using the database.

これはすでに他にセッションを利用している他のユーザがいるからなので、↓のようにすべてのセッションを切ってからリセットを実行することも可能

cd /var/www/rails/(プロジェクト名)/current export RAILS_ENV=lab # DETAIL: There is 1 other session using the database. 対策 # dbconsole でコネクションを切らないと、 db:reset(db:drop) 実施時にエラーになる bundle exec rails dbconsole << EOF SELECT pg_terminate_backend(psa.pid) FROM pg_stat_activity AS psa WHERE psa.datname = 'DB 名' AND psa.pid <> pg_backend_pid(); EOF # DB のリセットと seed を実施 bundle exec rake db:reset bundle exec rake db:seed:lab
  • 正直 DB をリセットするような時って、一回アプリを落としてもよいと思うので、純粋に今起動している puma なり WEBrick なりを落とした方が素直かもしれない