コンテンツにスキップ
ブリッジ - PostgreSQL

ブリッジ - PostgreSQL

PostgreSQLブリッジの登録

PostgreSQLデータベースに接続するブリッジを登録します。

bridge add -t postgres pg host=127.0.0.1 port=5432 user=dbuser dbname=postgres sslmode=disable;

接続オプションは以下のとおりです。

オプション説明
dbname接続先のデータベース名
user接続に使用するユーザー名
passwordユーザーのパスワード
host接続先のホスト。/で始まる場合はUnixドメインソケットを表します。既定値はlocalhosthost=127.0.0.1
portポート番号。既定値は5432
sslmodeSSLの使用(既定値require)。下表を参照(以下を参照)
connect_timeout接続の待機時間(秒)。0または省略した場合は無期限に待機
sslcertPEM形式の証明書ファイルのパス
sslkeyPEM形式の秘密鍵ファイルのパス
sslrootcertPEM形式のルート証明書ファイルのパス

sslmodeには、以下の値を指定できます。

sslmode説明
disableSSLを使用しない
require常にSSLを使用する(証明書の検証は省略)
verify-ca常にSSLを使用する(サーバー証明書が信頼できるCAによって署名されていることを検証)
verify-full常にSSLを使用する(サーバー証明書を検証し、証明書のホスト名と実際のホスト名が一致することを確認)

テーブルの作成

machbase-neoシェルで以下のコマンドを実行し、pgブリッジを介してpg_exampleテーブルを作成します。

bridge exec pg CREATE TABLE IF NOT EXISTS pg_example(
    id         SERIAL PRIMARY KEY,
    company    VARCHAR(50) UNIQUE NOT NULL,
    employee   INT,
    discount   REAL,
    plan       FLOAT(8),
    code       UUID,
    valid      BOOL,
    memo       TEXT,
    created_on TIMESTAMP NOT NULL
);

psqlコマンドラインツールで、テーブルが作成されたことを確認できます。

postgres=# \d pg_example;
                                        Table "public.pg_example"
   Column   |            Type             | Collation | Nullable |                Default                 
------------+-----------------------------+-----------+----------+----------------------------------------
 id         | integer                     |           | not null | nextval('pg_example_id_seq'::regclass)
 company    | character varying(50)       |           | not null | 
 employee   | integer                     |           |          | 
 discount   | real                        |           |          | 
 plan       | real                        |           |          | 
 code       | uuid                        |           |          | 
 valid      | boolean                     |           |          | 
 memo       | text                        |           |          | 
 created_on | timestamp without time zone |           | not null | 
Indexes:
    "pg_example_pkey" PRIMARY KEY, btree (id)
    "pg_example_company_key" UNIQUE CONSTRAINT, btree (company)

TQLによるPostgreSQLへの書き込み

現在のJavaScriptランタイムでは、次の例を使用してください。

STRING(payload() ?? `{
  "company": "acme",
  "employee": 10
}`)
SCRIPT({
  // JSONの入力文字列を解析し、現在時刻とともに出力
  const msg = JSON.parse($.values[0]);
  $.yield(msg.company, msg.employee, new Date());
})
INSERT(bridge("pg"), table("pg_example"), "company", "employee", "created_on")
旧Tengoの例(現在のランタイムでは実行できません)
BYTES(payload() ?? `{
  "company": "acme",
  "employee": 10
}`)
SCRIPT("tengo", {
  // 現在時刻を取得
  times := import("times")
  ts := times.now()
  // TQLコンテキストを取得
  ctx := import("context")
  val := ctx.value()
  // JSONを解析
  json := import("json")
  msg := json.decode(val[0])
  ctx.yield(msg.company, msg.employee, ts)
})
INSERT(bridge("pg"), table("pg_example"), "company", "employee", "created_on")
postgres=# select * from pg_example;
 id | company | employee | discount | plan | code | valid | memo |         created_on         
----+---------+----------+----------+------+------+-------+------+----------------------------
  1 | acme    |       10 |          |      |      |       |      | 2023-08-09 11:05:30.039961
(1 row)

TQLによるPostgreSQLからの読み取り

SQL(bridge('pg'), "select * from pg_example")
CSV()
最終更新日