Node-REDでHeroku Postgresを使う

久しぶりにHeroku Postgresを使ったフローを作っていて気がついたのですが、オープンソースで公開されていたre-postgresノードだとうまくいかないことに気がつきました😅

https://flows.nodered.org/node/node-red-contrib-re-postgres

Node-REDのPostgresノードのなかでは、このre-postgresノードを重宝していたのですが、Heroku Postgres側の仕様が変わったようです。

公開されている別のPostgres用のノードを発見しましたので、その使い方をご紹介したいと思います。

Herokuで使えるPostgresノード

以下のPostgresqlノードが今回使用したノードです。

https://flows.nodered.org/node/node-red-contrib-postgresql

インストールはパレットの管理から行います。

パレットの管理
パレットの管理

ノードのプロパティ

ここでは、どのような設定をすれば接続できるかをご説明します。Heroku Postgresを使ったことがない方向けのHerokuの設定手順は少し長くなりますので、記事の最後に記載します。

Postgresqlノードの画像
Postgresqlノード

Postgresqlノードをクリックしてプロパティ画面を開きます。Serverの右端にある鉛筆マークのアイコンをクリックしてデータベースサーバーへの接続情報を入力します。

ノードのプロパティ
ノードのプロパティ

次にデータベースサーバーへの接続情報はHeroku Postgresの管理コンソールから転記して入力します。

HostとDatabaseを入力
HostとDatabaseを入力
UserとPasswordを入力
UserとPasswordを入力

ここでConnectionタブに戻って、SSLの左端のプルダウンをクリックして、JSONを選択します。

Heroku PostgresでSSLは必須となるため、JSONには以下の設定値を記載します。

{ "require": true, "rejectUnauthorized": false }
JSON設定内容
設定完了

全て入力したら、更新ボタンをクリックして設定値を保存します。これでノードは使えるようになりましたので、あとはノードにSQLを渡すだけです。

サンプルフロー

PostgresqlノードにSQLを渡すには、msg.queryを使用します。templateノードを使って、SQLを記載して、msg.queryに設定します。

サンプルフローをDiscoverに公開しておりますので、ご自分のプロジェクトにインポートしてご覧ください。

以下は、devicestatusというテーブルを作成し、INSERT文、SELECT文を設定した例になります。

CREATE TABLEやSELECTは一般的なSQLの構文ですが、INSERT文は少し変わっています。INSERT文のSQLを少し解説しますと、以下のような構文になっています。

INSERT INTO devicestatus (devicename,devicestatus,timestamp) VALUES (
'{{devicename}}',
'{{devicestatus}}',
'{{timestamp}}'
);

{{devicename}}のような見慣れない書き方になっていますが、これはMustache記法と呼ばれているものです。二重カッコ{{でフローの変数をくくることで、動的にSQL文を作ることができます。Mustache記法の簡単な使い方はこちらの記事をご覧ください。

テンプレートノード
Mustache記法

参考:Heroku Postgresの準備

ここでは、Heroku Postgresを使ったことがない方向けに設定を順に示したいと思います。

Herokuアプリ作成とアドオンの追加

Herokuのアプリを作ったら、ResourcesタブのAdd-onsを追加する画面がありますので、Heroku Postgresを追加して、プランを選択します。

アドオンの追加

追加されたら、Heroku Postgresのリンクをクリックして、Heroku Postgresの管理画面を開きます。

HerokuアプリのResourcesタブにあるHeroku Postgresアイコンをクリック
Heroku Postgresの管理画面

Heroku Postgresの接続情報

SettingsタブのDatabase Credentialsに接続情報が記載されています。

Heroku Postgresの接続情報

SQLの操作

今回の記事では、Node-REDでSQLの操作をしました。参考までですが、DataClipsを使えば、Heroku上で直接SQLを書いて実行することができます。

保存もできます。