Recommended
PDF
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PDF
PDF
Pgunconf 20121212-postgeres fdw
PDF
JSONBはPostgreSQL9.5でいかに改善されたのか
PDF
PDF
PDF
PDF
PDF
PGCon.jp 2014 jsonb-datatype-20141205
PPTX
PDF
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
PDF
PDF
PDF
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
PDF
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PDF
外部データラッパによる PostgreSQL の拡張
PDF
PDF
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
PDF
Rにおける大規模データ解析(第10回TokyoWebMining)
PDF
PDF
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PPT
20090107 Postgre Sqlチューニング(Sql編)
PDF
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
PDF
PDF
Hackers Champloo 2016 postgresql-9.6
PDF
Pg14_sql_standard_function_body
PDF
my sql-postgresql勉強会#6 LT 私的なPostgreSQLの楽しみ方
PDF
PDF
知って得するWebで便利なpostgre sqlの3つの機能
More Related Content
PDF
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PDF
PDF
Pgunconf 20121212-postgeres fdw
PDF
JSONBはPostgreSQL9.5でいかに改善されたのか
PDF
PDF
PDF
What's hot
PDF
PDF
PGCon.jp 2014 jsonb-datatype-20141205
PPTX
PDF
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
PDF
PDF
PDF
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
PDF
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PDF
外部データラッパによる PostgreSQL の拡張
PDF
PDF
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
PDF
Rにおける大規模データ解析(第10回TokyoWebMining)
PDF
PDF
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PPT
20090107 Postgre Sqlチューニング(Sql編)
PDF
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
PDF
PDF
Hackers Champloo 2016 postgresql-9.6
PDF
Pg14_sql_standard_function_body
PDF
my sql-postgresql勉強会#6 LT 私的なPostgreSQLの楽しみ方
Similar to Lt ingaoho-jsonb+postgeres fdw
PDF
PDF
知って得するWebで便利なpostgre sqlの3つの機能
PDF
PDF
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
PPTX
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PDF
JPUGしくみ+アプリケーション勉強会(第20回)
PDF
PDF
JSONB型でpostgresをNoSQLっぽく使う
PDF
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
PDF
PDF
Postgresql advent calender 2014 using jsonb by ecpg
PDF
B-Treeのアーキテクチャ解説 (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PDF
20190119 aws-study-pg-extension
PDF
MyNA JPUG study 20160220-postgresql-json-datatype
PDF
PDF
20171103 pg con-jp-lt-plpgsql
PDF
Osc2015 hokkaido postgresql-semi-stuructured-datatype
PDF
Jpug study-jsonb-datatype-20141011
PDF
20150530 pgunconf-pgbench-semi-structured-benchmark
PDF
More from Toshi Harada
PDF
PDF
PDF
Jpug study-postgre sql-10-pub
PDF
PDF
Dblt#2 do-postgres-dream-of-graph-database
PDF
20190202-pgunconf-Access-Privilege-Inquiry-Functions
PDF
PDF
Osc shimane-2016-do-postgres-dream-of-graph-database
PDF
20181110 fok2018-pg-extension
PDF
Chugoku db 17th-postgresql-9.6
PDF
20190518 27th-chugoku db-lt-pg12
PDF
Chugoku db 20th-postgresql-10-pub
PDF
20171028 osc-nagaoka-postgre sql-10
PDF
20171106 ntt-tx-postgre sql-10
PDF
Ntt tx-study-postgre sql-10
PDF
Pgconf asia-201612203-pg reversi-ja
PDF
PDF
20181122 pg con-jp-lt-logrep
PDF
Pgconf asia-201612203-pg reversi
PDF
20170819 ocd-l tthon-pgdev
Recently uploaded
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):コアマイクロシステムズ株式会社 テーマ 「AI HPC時代のトータルソリューションプロバイダ」
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):日本ヒューレット・パッカード合同会社 テーマ1「大規模AIの能力を最大限に活用するHPE Comp...
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):Pacific Teck Japan テーマ3「『TrinityX』 AI時代のクラスターマネジメ...
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):Pacific Teck Japan テーマ2「『Slinky』 SlurmとクラウドのKuber...
PDF
論文紹介:DiffusionRet: Generative Text-Video Retrieval with Diffusion Model
PDF
論文紹介:HiLoRA: Adaptive Hierarchical LoRA Routing for Training-Free Domain Gene...
PDF
論文紹介:MotionMatcher: Cinematic Motion Customizationof Text-to-Video Diffusion ...
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):エヌビディア合同会社 テーマ1「NVIDIA 最新発表製品等のご案内」
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):日本ヒューレット・パッカード合同会社 テーマ3「IT運用とデータサイエンティストを強力に支援するH...
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):富士通株式会社 テーマ1「HPC&AI: Accelerating material develo...
PDF
AI開発の最前線を変えるニューラルネットワークプロセッサと、未来社会における応用可能性
PDF
ニューラルプロセッサによるAI処理の高速化と、未知の可能性を切り拓く未来の人工知能
PPTX
ChatGPTのコネクタ開発から学ぶ、外部サービスをつなぐMCPサーバーの仕組み
PDF
膨大なデータ時代を制する鍵、セグメンテーションAIが切り拓く解析精度と効率の革新
PPTX
2025年11月24日情報ネットワーク法学会大井哲也発表「API利用のシステム情報」
Lt ingaoho-jsonb+postgeres fdw 1. 2. 3. 4. 5. 6. 7. 8. 9. postgres_fdw
外部の PostgreSQL サーバに格納されたデータを
自分の DB 内のテーブルであるかのように
アクセスするために使用する、外部データラッパ
類似モジュールとして dblink があるが、
postgres_fdw のほうが、より自然なクエリが書ける。
参照だけでなく、更新 (insert/update/delete) も可。
PostgreSQL 9.3 からサポートされている。
と、古事記 PostgreSQL 文書に書かれている。
10. 11. 12. 13. 14. グワーッ!
foo=# COPY test FROM '/tmp/json.txt';
ERROR: cannot copy to foreign table "test"
foo=#
外部テーブルに
直接 COPY はできない。
表
リモートサーバ
外部表
ローカルサーバ
JSON データ COPY
15. 16. file_fdw+ バルク INSERT
こんなアトモスフィアなシェル作成!
#!/bin/sh
DBNAME=$1
FOREIGN_TABLE_ARG=$2
LOAD_FILE_NAME=$3
LOAD_TABLE_NAME=$4
CREATE_SERVER_SQL="CREATE SERVER __cp_server FOREIGN DATA WRAPPER file_fdw"
psql ${DBNAME} -c "${CREATE_SERVER_SQL}"
CREATE_FOREIGN_TABLE_SQL="CREATE FOREIGN TABLE __cp_table ( ${FOREIGN_TABLE_ARG} ) SERVER __cp_server OPTIONS (filename '${LOAD_FILE_NAME}')"
psql ${DBNAME} -c "${CREATE_FOREIGN_TABLE_SQL}"
INSERT_SQL="INSERT INTO ${LOAD_TABLE_NAME} (SELECT data FROM __cp_table )"
psql ${DBNAME} -c "${INSERT_SQL}"
DROP_FOREIGN_TABLE_SQL="DROP FOREIGN TABLE __cp_table"
psql ${DBNAME} -c "${DROP_FOREIGN_TABLE_SQL}"
DROP_SERVER_SQL="DROP SERVER __cp_server"
psql ${DBNAME} -c "${DROP_SERVER_SQL}"
contrib/file_fdw の外部サーバ / 外部表を定義
外部表を SELECT で全件検索した結果を
INSERT 文に流し込む。
最後に外部表と外部サーバを爆発四散!
17. file_fdw+ バルク INSERT
前ページのシェルを実行!
$ ./fdw_cp foo "data jsonb" "/tmp/json.txt" "test"
CREATE SERVER
CREATE FOREIGN TABLE
INSERT 0 100000
DROP FOREIGN TABLE
DROP SERVER
$
ゴウランガ!
COPY で使うファイルをそのまま使って
外部表へロード可能!
(COPY より遅いのは仕方がない。いいね?)
このシェルは postgres_fdw 専用というわけでなく
挿入操作が可能な FDW なら使用重点!
18. 19. 20. 21. 22. ローカルな問い合わせなら
btree 式インデックスも
gin インデックスも使える。
bar=# EXPLAIN SELECT * FROM test WHERE data->>'id' = '10000';
QUERY PLAN
-------------------------------------------------------------------------
Index Scan using test_id_idx on test (cost=0.42..8.44 rows=1 width=70)
Index Cond: ((data ->> 'id'::text) = '10000'::text)
(2 rows)
bar=# EXPLAIN SELECT * FROM test WHERE data @> '{"id":10000}';
QUERY PLAN
--------------------------------------------------------------------------
Bitmap Heap Scan on test (cost=28.77..336.47 rows=100 width=70)
Recheck Cond: (data @> '{"id": 10000}'::jsonb)
-> Bitmap Index Scan on test_idx (cost=0.00..28.75 rows=100 width=0)
Index Cond: (data @> '{"id": 10000}'::jsonb)
(4 rows)
あからさまにインデックス検索なのだ!
23. 24. @> 演算子 { キー : 値 } の場合
WHERE 句を pushdown して、
リモート側でも GIN インデックスを使用
foo=# EXPLAIN ANALYZE SELECT * FROM test WHERE data @> '{"id":10000}';
QUERY PLAN
--------------------------------------------------------------
Foreign Scan on test (cost=100.00..128.29 rows=1 width=32)
(actual time=0.579..0.579 rows=1 loops=1)
Planning time: 0.052 ms
Execution time: 0.867 ms
(3 rows)
Time: 1.204 ms
外部テーブルから返却された時点で
1件になっていることに注目重点な!
実際速い!
25. ->>' キー ' 演算子 値 の場合
WHERE 句は pushdown されず、
リモート側でフルスキャン全件取得!
アイエエエ!フルスキャン!
フルスキャンナンデ!
foo=# EXPLAIN ANALYZE SELECT * FROM test WHERE data->>'id' = '10000';
QUERY PLAN
----------------------------------------------------------------------
Foreign Scan on test (cost=100.00..159.93 rows=7 width=32)
(actual time=31.028..273.480 rows=1 loops=1)
Filter: ((data ->> 'id'::text) = '10000'::text)
Rows Removed by Filter: 99999
Planning time: 0.046 ms
Execution time: 273.581 ms
(5 rows)
そして外部テーブルからは全件 (10 万件 ) 返却されている!
あからさまにフルスキャンなのだ!ヤンナルネ・・・
実際遅い!
26. 27. 古事記 PostgreSQL 文書には
こう書かれている
F.31.4. リモート問合せの最適化
外部サーバからのデータ転送量を削減するため、
postgres_fdw はリモート問合せを最適化しようと試みます。
これは問い合わせの WHERE 句をリモートサーバに送出する事、
およびクエリで必要とされていないカラムを取得しない事により行われます。
問い合わせの誤作動のリスクを下げるため、
ビルトインのデータ型、演算子、関数だけを用いたものでない限り、
リモートサーバに WHERE 句は送出されません。
また、 WHERE 句で使われる演算子と関数は IMMUTABLE でなければなりません。
カラム ->>' キー名 ' への比較演算だとダメっぽい?
無視できぬ記述だ!
28. 29.