2. PostgreSQL - The most advanced
Open Source Relational Database
v9.5 New Feature
PostgreSQL Unconference/Tokyo May-20152
Custom-Scan
Interface
Custom-Join
Interface
8. PostgreSQL - The most advanced
Open Source Relational Database
Custom Scan/Joinを使うには (2/3)
▌CustomPath CustomScan
プラナーがCustomPathを選択
CustomScanノードを生成する
必要がある
▌どういう事か?
CustomPathから生成されるのは、
CustomScanだけではない。(将来的に)
CustomSort、CustomAgg、...
プラン木はcopyObject()可能である事
GpuScanの例
/* Path information of GpuScan */
typedef struct {
CustomPath cpath;
/* RestrictInfo run on host */
List *host_quals;
/* RestrictInfo run on devices */
List *dev_quals;
} GpuScanPath;
▌CustomScan CustomScanState
エグゼキュータの開始時に、
CustomScanノードの内容に基づいて
CustomScanStateを初期化。
GpuScanの例
typedef struct {
GpuTaskState gts;
BlockNumber curr_blknum;
BlockNumber last_blknum;
HeapTupleData scan_tuple;
List *dev_quals;
cl_uint num_rechecked;
} GpuScanState;
PostgreSQL Unconference/Tokyo May-20158
CustomScanStateを継承
9. PostgreSQL - The most advanced
Open Source Relational Database
Custom Scan/Joinを使うには (3/3)
▌Executorコールバックを各自実装する
typedef struct CustomExecMethods
{
const char *CustomName;
/* Executor methods: mark/restore are optional, the rest are required */
void (*BeginCustomScan) (struct CustomScanState *node,
EState *estate,
int eflags);
TupleTableSlot *(*ExecCustomScan) (struct CustomScanState *node);
void (*EndCustomScan) (struct CustomScanState *node);
void (*ReScanCustomScan) (struct CustomScanState *node);
void (*MarkPosCustomScan) (struct CustomScanState *node);
void (*RestrPosCustomScan) (struct CustomScanState *node);
/* Optional: print additional information in EXPLAIN */
void (*ExplainCustomScan) (struct CustomScanState *node,
List *ancestors,
struct ExplainState *es);
} CustomExecMethods;
PostgreSQL Unconference/Tokyo May-20159
10. PostgreSQL - The most advanced
Open Source Relational Database
CustomJoinはどう見えるか?
Table.X Table.Y
Path ①
NestLoop
Path ②
HashJoin
Path ③
MergeJoin
Path ④
CustomScan
(GpuJoin)
Built-in
logics
clause
x.id = y.id
X Y X Y
NestLoop HashJoin
X Y
MergeJoin
X Y
GpuJoin Result set
of tables join
Join “後” の結果セットを
スキャンしているように見え
る。
▌CustomScanによる Join の置換え
PostgreSQL Unconference/Tokyo May-201510
15. PostgreSQL - The most advanced
Open Source Relational Database
v9.5に向けての Open Issue
PostgreSQL Unconference/Tokyo May-201515
拡張モジュールが
Child-Pathをプラン木に
変換できなくなってしまった!?
16. PostgreSQL - The most advanced
Open Source Relational Database
もふっ、もふもふ。
16