はじめに
この記事ではHerokuにデプロイしたアプリのDBを、ローカルから参照する方法を解説します。
前提として、PCにHerokuをインストールしていることと、Herokuにアプリをデプロイしている必要があるため、それらの作業がまだ出来ていない人は以下の記事を参考にして設定を終わらせておきましょう。
https://qiita.com/ysda/items/5719c894254aa898aed1
この知識が役立つ場面
・本番環境でのみバグが起こっている
本番環境のDBに入っている何らかのデータが原因という場合もあります。
こういう時に、本番のDBを参照して確認してみましょう。
・卑猥な言葉や差別用語が投稿されてしまった
アプリをデプロイすると誰がどんなデータを作るかわかりません。
ブログアプリを例にすると、いつの間にか卑猥な言葉や差別用語の含まれた記事が作られる可能性があるわけです。そんな物をポートフォリオとして公開する訳にはいきません。
記事の削除機能を作っていなかった場合、削除機能を実装してデプロイして削除...という手間が発生しますが、DBを直接操作する手順を覚えておけば、迅速に不適切なデータの削除を行えます。
PostgreSQLのインストール
まずはheroku上のPostgreSQLのバージョンを確認します。
以下の例ではバージョンが12となっているので、ローカルのPCにバージョン12をインストールします。
% heroku pg -a アプリ名
=== DATABASE_URL
Plan: Hobby-dev
Status: Available
Connections: 0/20
PG Version: 12.2
Created: 2020-04-30 02:57 UTC
Data Size: 8.8 MB
Tables: 6
Rows: 29/10000 (In compliance)
Fork/Follow: Unsupported
Rollback: Unsupported
Continuous Protection: Off
Add-on: postgresql-convex-63450
以下のリンクからでPostgreSQLをダウンロードし、dmgファイルを開いてインストールしましょう。
https://postgresapp.com/downloads.html
これでDBを操作できるようになります!さっそくテーブルの一覧を表示してみましょう。
% heroku pg:psql -c "\d"
--> Connecting to postgresql-flexible-70379
List of relations
Schema | Name | Type | Owner
--------+----------------------+----------+----------------
public | ar_internal_metadata | table | xxeikjppyexwuj
public | posts | table | xxeikjppyexwuj
public | posts_id_seq | sequence | xxeikjppyexwuj
public | schema_migrations | table | xxeikjppyexwuj
public | users | table | xxeikjppyexwuj
public | users_id_seq | sequence | xxeikjppyexwuj
(6 rows)
SQL文は以下のコマンドで打てるようになります。
% heroku pg:psql -a アプリ名
select文を実行してみましょう。(SQL文の末尾にセミコロンをつけないと実行されないので注意)
アプリ名::DATABASE=> select * from posts;
id | title | content | created_at | updated_at | user_id
----+--------------+---------------------------+----------------------------+----------------------------+---------
2 | テストその2 | ourblogのテストその2です | 2020-05-13 15:49:47.069074 | 2020-05-13 15:49:47.069074 | 2
3 | テスト吉田 | 吉田ユーザーでのテスト | 2020-05-13 15:50:19.990057 | 2020-05-13 15:50:19.990057 | 1
4 | あああああ | おおおおおお | 2020-05-13 15:50:27.940949 | 2020-05-13 15:50:27.940949 | 1
1 | テスト編集後 | ourblogのテスト編集後 | 2020-05-13 15:49:30.594094 | 2020-05-13 16:34:25.282793 | 2
(4 rows)
DBの操作を終了してターミナルに戻りたい時はquitで戻れます。
アプリ名::DATABASE=> quit