🦆

DuckDB から直接 PostgreSQL アクセスする

2024/12/02に公開

前提

  • DuckDB が使える環境
  • Docker Compose が使える環境

まとめ

  • DuckDB から直接 PostgreSQL にアクセスできる
  • PostgreSQL の読み込みも書き込みもできる
  • バッチ処理を PostgreSQL のリードレプリカからデータを読み込んで、DuckDB で集計して PostgreSQL に書き込むと言うのができる

DuckDB とは

こちらをどうぞ。

DuckDB雑紹介(1.1対応版)@DuckDB座談会 - Speaker Deck

PostgreSQL Extension

名前で誤解しやすいのですが DuckDB の PostgreSQL Extension であって、PostgreSQL の Extension ではないので注意してください。

DuckDB のPostgreSQL Extension は PostgreSQL のデータを直接操作できるため、読み込みも書き込みもできますが、今回は読み込みに絞って紹介します。

Secret Manager

PostgreSQL に接続するためには、Secret Manager を利用します。

DuckDB の Secret Manager は色々便利ですが、PostgreSQL にも対応しています。

CREATE SECRET spam (
    TYPE POSTGRES,
    HOST '127.0.0.1',
    PORT 5432,
    DATABASE postgres,
    USER 'postgres',
    PASSWORD ''
);

安全のため読み込みのみで繫ぐ

  • Secret Manager で名前を付けている場合は SECRET を指定するのがオススメ
  • READ_ONLY にすることで事故を防ぐ
  • AS postgres_db の部分で認識できるように名前を付ける
ATTACH '' AS postgres_db (TYPE POSTGRES, SECRET spam, READ_ONLY);

使ってみる

  • SHOW ALL TABLES でテーブルが見れる
  • PostgreSQL に egg というテーブルがあるとする
CREATE TABLE egg AS SELECT * FROM postgres_db.egg

切断

  • DETACH するだけ
DETACH postgres_db;

COPY .. TO

  • PostgreSQL のテーブルを Parquet 化できる
COPY postgres_db.egg TO 'egg.parquet (FORMAT Parquet, COMPRESSION zstd)';

関連する記事

参考

Discussion