DuckDB Quack: 別の DuckDB を ATTACH してリモート DB として使う
Quack 拡張で、ある DuckDB プロセスをサーバにし、別の DuckDB から ATTACH 'quack:host' でつなぐ。リモートのテーブルをローカルと同じ SQL で読み書きできる。
どんなときに使う?
- サーバ上の DuckDB のデータを、複数のマシンやアプリから分析したい
- 複数のクライアントから 1 つの DuckDB に書き込みを集めたい(同時書き込み対応とされる)
- 大量の行をまとめて取り出したい(開発チームの比較では 6000 万行の転送が 5 秒以内で、PostgreSQL や Arrow Flight より速い)
やり方
サーバ側(DuckDB #1):
sql
CALL quack_serve('quack:localhost', token = 'super_secret');
CREATE TABLE hello AS FROM VALUES ('world') v(s);クライアント側(DuckDB #2):
sql
CREATE SECRET (TYPE quack, TOKEN 'super_secret');
ATTACH 'quack:localhost' AS remote;
FROM remote.hello; -- リモートのテーブルを読む
FROM remote.hello WHERE s = 'world'; -- フィルタはリモートで実行される- 拡張は初回利用時に自動で入る(明示するなら
INSTALL quack; LOAD quack;) - URI は
quack:host[:port]、既定ポートは9494(quack://localhostも同じ) - 一度だけ投げるなら
quack_query(uri, query)でもよい - トランザクション(
BEGIN; ... COMMIT;)はリモートに転送される。外すときはDETACH
注意点
- まだ実験的(DuckDB 1.5 系)。プロトコルや関数名は変わりうる。正式版は DuckDB v2.0(2026 年秋予定)
- サーバは既定で localhost だけで待ち受ける。外から受けるには
allow_other_hostname => trueが必要。外に出すなら必ずトークンを設定し、ネットワークも閉じる(Tailscale などの中に置く) - ローカル以外への
ATTACHは既定で HTTPS。平文 HTTP のリモートにはDISABLE_SSL trueが必要になるが、公開網では使わない - DuckLake のカタログとしてリモート DuckDB を使う統合も予定されている
出典
- @publickey · 2026-05-18
- Publickey 記事: publickey1.jp
- DuckDB ドキュメント: duckdb.org