ランダムの森

20代エンジニアです。プログラミングについて主に書いてます。

herokuのPostgresSQLをNode.jsで触る方法

herokuのPostgreSQLを使ってデータの保存読み込みを行ったのでメモ。
最後はNode.jsで書いてますが、途中までは他の言語でも参考になるはずです。

一連の流れの説明がなかったので残しておきます。

やりたいことは、
heroku のアプリにデータベース(PostgreSQL)を追加
⬇︎
コマンドからPostgreSQLにテーブルを追加して適当な値を格納する。
⬇︎
Node.jsからデータベースにアクセスして、PostgreSQL内のデータを触って見る。

という流れです。herokuにはアプリ登録していてPostgreSQLは追加していないところからスタートします。

- heroku アプリにデータベースを追加

herokuのアプリ画面でResources>Add-onsの入力欄に、
heroku Postgresと入力して検索。そのまま、フリープランでAdd-onします。
以下の画面。
f:id:doreikaiho:20190529193014p:plain

すると、Settings > Config Variables のところにデータベースのURLが表示されます。
これでデータベースを追加は完了。楽チン!

- PostgreSQLにテーブルを追加

次にデータベースにテーブルを作成します。
おそらくGUIはないと思うのでコマンドからテーブル作成を行います。
まずはPostgresのコマンドが動くようにローカルにPostgresをインストールしておく必要があります。

次にherokuのPostgresにアクセスできるようにします。

$ heroku pg:psql

これでデータベースを編集できるモードになりました。
次にテーブルを作成していきます。

::DATABASE=> CREATE TABLE users
::DATABASE-> (
::DATABASE(>  user_id SERIAL,
::DATABASE(>  name character varying(100) NOT NULL,
::DATABASE(>  date timestamp NOT NULL
::DATABASE(> );

これでusersテーブルができました。以下コマンドでテーブルの構造が確認できます。

::DATABASE-> \d users
- Node.jsからデータベースにアクセス

では、Node.jsのスクリプトでデータベースをいじくります。
と言っても対してことはなくて、データベースのURLだけを指定してあげればよいので、
簡単です。

データベースのURLは以下のコマンドで取得できます。

heroku pg:credentials:url --app アプリ名

取得したらherokuの環境変数として入れてあげます。

$heroku config:set DATABASE_URL=データベースのURL

あとはNode.jsでこの環境変数を使ってデータベースに接続するだけ。
事前にpgをインストールしておきます。

npm install pg

以下のコードが基本形です。ssl通信が必要となるみたいなのでssl: trueを忘れないように。

const { Client } = require('pg');

const client = new Client({
  connectionString: process.env.DATABASE_URL,
  ssl: true,
});

client.connect();

client.query('SELECT * FROM users;', (err, res) => {
  if (err) throw err;
  for (let row of res.rows) {
    console.log(JSON.stringify(row));
  }
  client.end();
});

以上です。