DifyからSupabaseを使ってみる - ③汎用クライアント編

こんにちは!

Dify×Supabaseの第3回です。今回は汎用データベースクライアントのプラグインを使ってSupabaseのデータベースを操作する方法について書いてみたいと思います。

汎用のデータベースクライアントなので、単純にPostgreSQLに接続するのとやっていることは変わりません。(※SupabaseはPostgreSQLベースのデータベースプラットフォームです)

Supabaseの接続情報の確認

汎用クライアントから接続するための、接続先のホスト名、ポート、データベース名、ユーザー、パスワードなどの情報を確認しておきます。

Supabaseの画面の上部に「Connect」のボタンがあるので、それを開きます。

Type「PSQL」を選択し「View parameters」を開くとパラメーターを確認出来ます。
ここで注意したいのは、赤線を引いているところ。

Not IPv4 compatible
Use Session Pooler if on a IPv4 network or purchase IPv4 add-on
訳:

IPv4 には対応していません
IPv4 ネットワークの場合はセッションプーラーを使用するか、IPv4 アドオンを購入してください

IPv4を使用するには別途オプションの購入が必要なようです。表示されているホスト名に対して実際にnslookupをかけるとIPv4が割り当たっておらず名前解決できませんでした(IPv6は割り当たっている)。説明にも書かれている通り、IPv4を追加購入せずに接続するにはSession Poolerを使うと良い様です。

確認してみましょう。

画面をMethod「Session Pooler」に切り替えます。

こちらの接続情報を使用します。ユーザー名は自動で割り振られたものが表示されています。
先ほどバツになっていたIPv4もSession Poolerでは IPv4 compatible になっています。

データベースのパスワードはプロジェクト作成時に設定したものになります。※後から画面で確認することが出来ないので忘れてしまった場合はデータベース設定の画面からパスワードを再設定してください。

これでクライアントから接続するための情報が整いました。

プラグインのインストール

Difyのマーケットプレイスで「database」などで検索すると様々なプラグインが見つかります。汎用クライアントのプラグインも数多くあるので、その中で自分の好みのものを選択すると良いと思います。

今回は「postgresql」で検索してできた下記のプラグインを試してみたいと思います。

インストールを実行し、プラグインの設定を開きます。

image-png-Jan-01-2026-01-36-38-8831-AM

APIキー認証設定を行います。

事前に確認した接続情報を設定します。

各情報を入力して「保存」で接続設定は完了です。

ワークフローサンプル(INSERT)

汎用クライアントを使ってINSERTを行うものを作ってみます。

これまでと同様、まずユーザー入力ノードから作成します。

image-png-Dec-31-2025-05-13-44-9178-AM

titleとmessageの入力をそれぞれStringの短文、段落、で用意。

次にユーザー入力のノードの「+」をクリックしてDatabase Clientのノードを追加します。


クライアントノードは3種類ありますが、PostgreSQL Client (5)と(10)は機能的には同じでGUI上で設定できるプレースホルダが5個か10個かの違いだけです。PostgreSQL Batch Clientのほうは複数行INSERTをサポートするためのもので配列で複数データを指定できます。

今回は「PostgreSQL Client (5)」を使用します。

SQL Queryにクエリを記述します。$arg0や$arg1などを使用することでプレースホルダ的に変数の引き渡しが出来ます。今回はユーザー入力ノードのtitleとmessageを$arg0,$arg1としてセットします。

SQL Query: INSERT INTO messages (title, message) VALUES ($arg0, $arg1);
arg0: [ユーザー入力/title]
arg1: [ユーザー入力/message]

最後に出力ノードを追加して完成です。


出力変数にはPostgreSQL Clientノードのjson出力を指定しておきます。

テスト実行

作成したワークフローを「テスト実行」から実行します。

titleとmessageに適当な文字列を入力し「実行開始」をクリック。

各ノードが順に実行されて正常に完了しました。

結果には挿入された件数が返されています。

SupabaseのTable Editorで挿入後の内容を確認してみます。

テーブルにレコードが追加されていることが確認できました。

ワークフローサンプル(SELECT)

SELECTについてもほぼ使い方は変わりません。SQL Queryを記述し、arg0~nにはプレースホルダへ渡す内容をセットするだけです。

先ほどのPostgreSQL ClientノードのSQL Queryとarg0,arg1を下記の様に変更してみます。

SQL Query: SELECT * FROM messages WHERE title LIKE $arg0 AND message LIKE $arg1;
arg0: %[ユーザー入力/title]%
arg1: %[ユーザー入力/message]%
テスト実行

修正したワークフローを「テスト実行」から実行します。

titleに「テスト2」messageに「天気」と入力し「実行開始」をクリックします。

titleに「テスト2」が含まれ、かつ、messageに「天気」が含まれる条件で抽出されました。見つかった1件がjsonで返されています。

まとめ

いかがでしたか。汎用データーベースクライアントを用いることでクエリの記述が柔軟になり自由度が向上しました。

Supabaseプラグイン、HTTPノード、汎用データーベースクライアントと、3つの方法を紹介してきましたがそれぞれ手軽さと自由度が様々なのでその時必要に応じて適切な方法を使い分けてみてください。