🦆
DuckDB から直接 PostgreSQL アクセスする
前提
- 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