1
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.

ECSから rails db:migrate:reset するときに発生するエラー(〇〇 is being accessed by other users)を解消する

Posted at

注意

ポートフォリオ用に作成したサイトの本番環境を直接操作しています。
適切な対処法でないかもしれないので、とりあえずエラーを直したいという方はどうぞ。

背景

railsコンテナで rails db:migrate:reset ができない

あるときseedファイルを変更したので、一度RDSの中をリセットしようと思いrailsコンテナから上記のコマンドを打つと、タイトルのエラーが発生しました。他のユーザー(というかコンテナ)が接続しており、実行できないとのことです。

使用技術

・ECS:EC2タイプ
・RDS:PostgresQL(11.11)

上記のインスタンスの作成は割愛します。

やったこと

EC2にpsqlコマンドをインストールしてRDSに接続

railsコンテナからRDSにアクセスしようとしたのですが、肝心のpsqlコマンドをインストールしていませんでした。
そこで応急処置として、EC2にpsqlコマンドを入れて接続しました。

以下、その手順です。
(現在、amazon-linux-extrasはpostgresql11までしかインストールできません。12,13をインストールする場合はこちらの記事が参考になります。)

# ご使用のバージョンに合わせてインストールしてください
$ sudo amazon-linux-extras postgresql11

# バージョンの確認
$ psql --version
psql (PostgreSQL) 11.5

# DBアクセス用のuserがいない場合は作成してください
$ sudo adduser <ユーザー名>
$ su - <ユーザー名>

# postgresサーバーに接続
$ psql \
> --host=<RDSのエンドポイント> \
> --username=<ユーザー名>
> --password \
> --port=5432 \
> --dbname=<RDSのインスタンス名>

これで接続は完了です。
(接続できないときは、RDSのセキュリティグループのインバウンドを確認してみてください)

RDSにアクセスしているプロセスを削除

接続できれば、あとは接続中のプロセスをみつけて削除するだけです。

# すべてのプロセスを表示
SELECT pid FROM pg_stat_activity where pid <> pg_backend_pid();

# 表示例
1234
1235

# プロセスを削除
SELECT pg_terminate_backend(1234);
SELECT pg_terminate_backend(1235);

# psqlの終了
\q
# コンテナに入ったのち、下記のコマンドを実行
$ bundle exec rake db:migrate:reset DISABLE_DATABASE_ENVIRONMENT_CHECK=1

以上になります。

まとめ

私は開発環境でPostgresQLをコンテナ化していたので、エラーが出た時はDBコンテナを壊して再構築していました。そのため、本番環境の対処がわからず戸惑いました。何も考えずに作業すると良くないですね:sweat_smile:勉強します。

1
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
1
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?