技術ブログ

(技術系中心)基本自分用備忘録なので、あくまで参考程度でお願いします。

Heroku Postgres(DB)をローカルから操作する方法

はじめに

PaaSシステムのHerokuを利用しているのですが、DBを使用する際に、直接SQLを手動で実行したいケースが発生しました。 (正式にはPostgreSQL をチューニングしたHeroku Postgresを利用しています) https://www.heroku.com/postgres

■ 手順

STEP1. Heroku CLIを導入
STEP2. DB接続情報の取得
STEP3. DB接続

STEP1. Heroku CLIを導入

Heroku CLIとは、さまざまなオペレーティングシステムコマンドライン/シェルからHerokuアプリケーションを作成および管理するためのツールです。

今回はHeroku CLIを利用してHeroku Postgresを操作するのでHeroku CLIを導入していない場合は導入しましょう。

導入方法は下記参照 https://devcenter.heroku.com/articles/heroku-cli

僕のバージョンは以下になります。

~ ❯❯❯ heroku --version                                                                                                                                                                                                                                                      [~]
heroku/7.33.3 darwin-x64 node-v11.14.0

STEP2. DB接続情報の取得

下記コマンドを実行し、DBへの接続情報を取得する。 heroku pg:credentials:urlで、接続先のDB接続情報、ホスト名、ポートなどが取得できるので利用します。

$ heroku pg:credentials:url --app [アプリケーション名]
Connection information for default credential.
Connection info string:
   "dbname=xxxxxx host=ec2-xxxxxx.amazonaws.com port=5432 user=xxxxx password=xxxxxx sslmode=require"
Connection URL:
   postgres://ユーザ名:パスワード@ホスト名:5432/データベース名

STEP3. DB接続

DBへ接続するにあたり、 PostgreSQL がローカル環境にインストールされていることが必須です。 もしインストールしていない場合はインストールします。

brew install postgresql

僕のバージョンは以下になります。

~/D/w/heroku ❯❯❯ postgres --version                                                                                                                                                                                        [~/Desktop/workspac/herokura]+[feature/csv_output]
postgres (PostgreSQL) 11.5

では、DB接続しましょう。

heroku pg:psql -a [アプリケーション名]

接続に成功すると以下のようになります。

~/D/w/heroku ❯❯❯ heroku pg:psql -a [APP-NAME]                                                                                         [~/Desktop/workspac/herokura]+[fix/search_account_function]
--> Connecting to postgresql-XXXXXX-XXXXXX
psql (11.5)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

[APP-NAME] ::DATABASE=>

実際にSQLを叩いて必要な情報が取得できるか確認してみましょう。

herok-staging::DATABASE=> select count(*) from salesforce.account;
 count
-------
  5293
(1 row)

SQLが叩かれて数字が取れていますね。これで成功です。

参考

Heroku Postgresをローカル環境から手動で操作する方法について https://sysrigar.com/2019/01/20/heroku-postgres%E3%82%92%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E7%92%B0%E5%A2%83%E3%81%8B%E3%82%89%E6%89%8B%E5%8B%95%E3%81%A7%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AB%E3%81%A4/