| PostgreSQL 9.2.4文鐃緒申 | ||||
|---|---|---|---|---|
| 前のページ | 上に戻る | 第 54章SP-GiST鐃緒申鐃緒申妊奪鐃緒申鐃� | 次のページ | |
SP-GiST鐃熟刻申鐃駿わ申鐃緒申櫺鐃緒申鐃緒申譴随申鐃緒申鵐織侫鐃緒申鐃緒申鐃緒申鐃緒申鷆,鐃緒申泙鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申瓮緒申奪匹粒鐃夙�申圓鐃緒申鐃緒申鐃塾デ¥申鐃緒申鐃緒申鐃緒申鐃術のメソ鐃獣ドわ申鐃緒申鐃緒申発鐃緒申鐃緒申必鐃竣わ申鐃緒申鐃緒申泙鐃緒申鐃� SP-GiST鐃塾ワ申鐃緒申鐃熟醐申率的鐃淑デワ申鐃緒申鐃緒申鐃殉ッピングわ申鐃准刻申造鐃緒申探鐃緒申鐃緒申担鐃緒申鐃緒申鐃殉わ申鐃緒申 鐃殉わ申鐃緒申同鐃緒申鐃渋刻申鐃緒申鐃緒申肇鐃緒申鐃緒申鐃緒申呂鐃獣器申鐃緒申鐃緒申泙鐃緒申鐃�
SP-GiST鐃塾ツリー鐃塾リー鐃春ワ申鐃竣ワ申蓮鐃緒申鐃緒申鐃叔ッワ申鐃緒申鐃緒申鐃春わ申鐃緒申譴随申鐃緒申同鐃緒申鐃叔¥申鐃緒申鐃緒申鐃緒申鐃粛わ申泙鐃叔わ申鐃殉わ申鐃緒申 鐃暑ー鐃夙ワ申戰鐃祝わ申鐃緒申蝓種申侫鐃緒申廛鐃熟¥申必鐃緒申鐃緒申鐃緒申妊奪鐃緒申鐃緒申鐃緒申佞鐃緒申鐃曙た鐃緒申鐃塾デ¥申鐃緒申鐃緒申鐃粛わ申泙鐃叔わ申鐃殉わ申鐃緒申鐃緒申鐃緒申蟆種申離鐃駿ワ申離蝓種申侫鐃緒申廛鐃熟¥申鐃緒申鐃緒申鐃緒申鐃淑ど¥申鐃緒申鐃縮わ申鐃曙た表鐃緒申鐃緒申鐃緒申鐃殉わ申任鐃緒申覆鐃緒申鐃緒申鐃緒申里鐃殉わ申鐃緒申 鐃緒申鐃塾常申隋�申藥誌申劵鐃緒申薀刻申離鐃緒申檗鐃緒申抜愎鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申廛鐃緒申蝓種申侫鐃駿ワ申泙任鐃緒申匹鐃淑わ申鐃初集鐃緒申鐃緒申鐃緒申鐃夙って醐申鐃緒申鐃粛わ申胴鐃緒申曚任鐃緒申鐃宿�申廚鐃緒申鐃緒申鐃殉わ申鐃緒申
鐃緒申鐃緒申鐃緒申鐃竣ワ申蓮鐃獣居申鐃緒申擇鐃淑�申鐃緒申鐃緒申箸覆襪随申瓠�申鐃獣わ申複鐃緒申鐃叔わ申鐃緒申 鐃緒申鐃曙ぞ鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申廛鐃緒申1鐃縦以常申鐃�鐃塾¥申鐃緒申鐃塾緒申鐃緒申鐃殉わ申任鐃緒申蝓�申痢鐃緒申匹鐃緒申鐃緒申鐃塾リー鐃緒申鐃粛のワ申鐃暑ー鐃竣わ申表鐃緒申鐃緒申鐃殉わ申鐃緒申 鐃塾¥申鐃宿は駕申鐃緒申鐃緒申鐃塾ワ申鵐�鐃殉わ申任鐃緒申蝓�申鐃緒申鐃熟駕申鐃塾ワ申戰鐃緒申鐃縮わ申鐃緒申鐃緒申鐃緒申鐃竣ワ申鐃舜わ申鐃緒申鐃緒申鐃緒申鐃暑い鐃熟わ申鐃駿わ申同鐃緒申鐃緒申鐃緒申妊奪鐃緒申鐃緒申據鐃緒申鐃緒申鐃祝載ってわ申鐃緒申蝓種申侫鐃緒申廛鐃緒申短鐃緒申鐃所ス鐃夙わ申悗鐃緒申討鐃緒申泙鐃緒申鐃� 鐃緒申鐃曙ぞ鐃緒申離痢鐃緒申匹蓮鐃緒申鐃緒申鐃薯記述わ申鐃緒申label鐃緒申鐃緒申辰討鐃緒申泙鐃緒申鐃� 鐃純え鐃出¥申鐃緒申鐃緒申鐃緒申鐃准では¥申鐃塾¥申鐃宿のワ申戰鐃緒申文鐃緒申鐃緒申鐃緒申佑亮鐃緒申鐃淑醐申鐃緒申砲鐃緒申襪鰹申箸鐃緒申任鐃緒申泙鐃緒申鐃� 鐃緒申略鐃緒申能鐃叔わ申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃竣ワ申呂鐃緒申里鐃緒申戮討離鐃緒申弌鐃緒申魑Ⅸ劼鐃緒申鐃�鐃緒申頭鐃緒申鐃緒申鐃粛わ申鐃緒申弔鐃緒申箸鐃緒申任鐃緒申泙鐃緒申鐃� 鐃緒申鐃緒申鐃緒申鐃准では¥申鐃緒申鐃緒申鐃宿緒申鐃緒申鐃緒申鐃緒申文鐃緒申鐃緒申剖鐃緒申未鐃緒申鐃銃�申鐃緒申箸鐃緒申襪鰹申箸鐃緒申任鐃緒申泙鐃緒申鐃� 鐃緒申頭鐃緒申鐃緒申鐃粛は¥申必鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申頭鐃緒申鐃叔わ申鐃緒申必鐃竣はなわ申鐃緒申鐃初算鐃述ワ申鐃初ス鐃緒申必鐃竣とわ申鐃緒申任鐃春わ申鐃粛わ申鐃宿わ申鐃叔わ申鐃緒申 鐃純え鐃出誌申分鐃准では¥申鐃緒申鐃緒申鐃醇心鐃緒申鐃緒申鐃楯誌申鐃緒申鐃緒申4鐃縦の象限をそわ申鐃緒申鐃緒申鐃緒申鐃緒申的鐃緒申測鐃緒申茲�申砲任鐃緒申泙鐃緒申鐃� 鐃緒申鐃緒申鐃緒申鐃緒申函鐃緒申鐃淑�申擇鐃緒申鐃緒申鐃緒申鐃緒申廛鐃熟わ申鐃緒申鐃醇心鐃緒申鐃塾種申鐃緒申両欷造鐃緒申弍鐃緒申鐃緒申鐃�4鐃縦のノ¥申鐃宿わ申泙爐鰹申箸砲覆鐃叔わ申鐃順う鐃緒申
鐃准刻申造鐃塾ワ申鐃暑ゴ鐃所ズ鐃緒申砲蓮鐃緒申鐃緒申澆離鐃緒申廛鐃塾ワ申戰鐃�(鐃緒申鐃緒申)鐃緒申鐃塾ってわ申鐃暑こ鐃夙わ申必鐃竣なわ申里鐃緒申鐃緒申鐃殉わ申鐃緒申鐃緒申鐃緒申鐃叔¥申SP-GiST鐃塾ワ申鐃緒申鐃熟¥申鐃初算鐃述ワ申鐃初ス鐃緒申鐃准刻申造鐃薯たどって駕申鐃緒申鐃緒申箸鐃緒申縫鐃駿ワ申鐃緒申隆鐃緒申鐃緒申鐃緒申能鐃祝わ申鐃銃わ申鐃殉わ申鐃緒申 鐃殉わ申鐃緒申必鐃竣でわ申鐃緒申弌鐃宿緒申鐃緒申鐃緒申鐃緒申鐃粛わ申短鐃重�申忘胴鐃緒申曚鐃緒申襪鰹申箸皀居申檗鐃緒申箸鐃緒申討鐃緒申泙鐃緒申鐃�
注意: SP-GiST鐃塾ワ申鐃緒申鐃塾ワ申鐃緒申鐃宿わ申null鐃緒申鐃緒申肇鐃祝つわ申鐃銃わ申鐃出縁申鐃緒申鐃銃わ申鐃殉わ申鐃緒申 SP-GiST鐃塾ワ申鐃緒申妊奪鐃緒申鐃緒申魯鐃緒申鐃叔ッワ申鐃緒申鐃緒申null鐃塾ワ申鐃緒申肇鐃祝つわ申鐃銃わ申鐃叔種申鐃緒申泙鐃緒申鐃緒申鐃緒申鐃緒申鐃熟ワ申鐃緒申妊奪鐃緒申鐃緒申留藥誌申劵鐃緒申薀刻申離鐃緒申鐃緒申匹鐃緒申鐃熟縁申鐃緒申鐃緒申討鐃緒申鐃塾で¥申null鐃塾ワ申鐃緒申妊奪鐃緒申鐃緒申鐃緒申鐃夙ワ申筝¥申鐃緒申鐃緒が鐃初算鐃述ワ申鐃初ス鐃塾メソ鐃獣ドわ申鐃熟わ申鐃緒申襪鰹申箸呂鐃緒申鐃殉わ申鐃緒申 (SP-GiST鐃塾演算鐃述は醐申鐃淑なのわ申NULL鐃粛につわ申鐃緒申鐃緒申鐃緒申鐃緒申鐃瞬わ申鐃緒申鐃夙はでわ申鐃淑わ申鐃緒申鐃緒申鐃所さ鐃緒申討鐃緒申泙鐃緒申鐃�) 鐃緒申鐃獣て¥申鐃緒申鐃緒申鐃叔はわ申鐃緒申幣紂�NULL鐃祝つわ申鐃銃居申鐃緒申鐃緒申鐃殉わ申鐃緒申
SP-GiST鐃塾ワ申鐃緒申妊奪鐃緒申鐃緒申藥誌申劵鐃緒申薀刻申鐃緒申鷆,鐃緒申覆鐃緒申鐃出なわ申覆鐃緒申罅種申鐃緒申鐃緒申鐃潤ソ鐃獣ドわ申5鐃縦わ申鐃緒申泙鐃緒申鐃�
5鐃縦のメソ鐃獣ドはわ申鐃緒申鐃緒申鐃�2鐃縦わ申internal鐃緒申鐃緒申鐃緒申箸蝓�1鐃緒申鐃旬の逸申鐃緒申鐃熟ワ申鐃楯¥申鐃夙メソ鐃獣ドわ申鐃緒申鐃緒申鐃粛わ申泙鐃�C鐃塾刻申造鐃塾へのポワ申鐃藷タ¥申2鐃緒申鐃旬の逸申鐃緒申鐃熟緒申鐃緒申鐃粛わ申鐃瞬わ申鐃緒申鐃�C鐃塾刻申造鐃塾へのポワ申鐃藷タとわ申鐃緒申鐃緒申鐃緒申鐃祝緒申鐃獣てわ申鐃殉わ申鐃緒申
鐃潤ソ鐃獣ドのわ申鐃緒申4鐃縦は¥申鐃緒申鐃塾件申未鐃緒申鐃緒申戮峠鐃緒申蝋鐃渋わ申里鐃緒申鐃祝わ申鐃緒申里如鐃獣縁申鐃�void鐃緒申鐃瞬わ申鐃殉わ申鐃緒申鐃緒申leaf_consistent鐃熟¥申鐃緒申鐃緒申鐃�boolean鐃塾件申未鐃緒申屬鐃緒申泙鐃緒申鐃�
鐃潤ソ鐃獣ドは¥申鐃緒申鐃緒申鐃緒申鐃熟刻申造鐃塾のどのフワ申鐃緒申鐃緒申匹鐃緒申儿鐃緒申鐃緒申討呂鐃緒申鐃緒申泙鐃緒申鐃�
鐃宿わ申幣鐃緒申任癲�申鐃緒申蝋鐃渋わ申里魯罅種申鐃緒申鐃緒申鐃潤ソ鐃獣ドわ申討喀个鐃緒申鐃緒申縫鐃緒申鐃緒申暴鐃緒申鐃緒申鐃緒申鐃緒申泙鐃緒申鐃�
5鐃縦のユー鐃緒申鐃緒申鐃緒申瓮緒申奪匹楼焚鐃緒申里箸鐃緒申鐃叔わ申鐃緒申
config鐃緒申頭鐃緒申鐃夙ノ¥申鐃宿ワ申戰鐃塾デ¥申鐃緒申鐃緒申鐃塾デ¥申鐃緒申鐃緒申OID鐃緒申泙瓠�申鐃緒申鐃叔ッワ申鐃緒申鐃塾種申鐃緒申鐃祝関わ申鐃緒申鐃緒申的鐃緒申鐃緒申鐃緒申屬鐃緒申泙鐃緒申鐃�
鐃舜随申鐃緒申SQL鐃緒申鐃緒申楼焚鐃緒申里茲�申砲覆鐃殉わ申鐃緒申
CREATE FUNCTION my_config(internal, internal) RETURNS void ...
1鐃緒申鐃旬の逸申鐃緒申鐃緒申C鐃緒申spgConfigIn鐃緒申造鐃塾へのポワ申鐃藷タで¥申鐃舜随申鐃緒申鐃緒申鐃熟デ¥申鐃緒申鐃緒申泙澆泙鐃緒申鐃� 2鐃緒申鐃旬の逸申鐃緒申鐃緒申C鐃緒申spgConfigOut鐃緒申造鐃塾へのポワ申鐃藷タで¥申鐃舜随申鐃緒申鐃緒申未離如鐃緒申鐃緒申鐃緒申鐃緒申鐃殉わ申鐃緒申
typedef struct spgConfigIn
{
Oid attType; /* Data type to be indexed */
} spgConfigIn;
typedef struct spgConfigOut
{
Oid prefixType; /* Data type of inner-tuple prefixes */
Oid labelType; /* Data type of inner-tuple node labels */
bool canReturnData; /* Opclass can reconstruct original data */
bool longValuesOK; /* Opclass can cope with values > 1 page */
} spgConfigOut;attType鐃緒申多鐃粛のワ申鐃緒申妊奪鐃緒申鐃緒申藥誌申劵鐃緒申薀刻申鬟汽檗鐃緒申箸鐃緒申襪随申鐃緒申鐃熟わ申鐃緒申泙鐃緒申鐃� 鐃縮常申慮鐃緒申鐃叔¥申鐃緒申鐃緒申鐃塾演算鐃述ワ申鐃初ス鐃叔は¥申鐃緒申鐃緒申肋鐃緒申同鐃緒申鐃粛わ申鐃緒申辰討鐃緒申鐃塾わ申無鐃緒申任鐃緒申泙鐃緒申鐃�
鐃緒申頭鐃緒申鐃緒申箸鐃淑わ申鐃初算鐃述ワ申鐃初ス鐃叔は¥申prefixType鐃緒申VOIDOID鐃緒申鐃緒申鐃所す鐃暑こ鐃夙わ申鐃叔わ申鐃殉わ申鐃緒申 同鐃粛に¥申鐃塾¥申鐃宿ワ申戰鐃緒申箸鐃淑わ申鐃初算鐃述ワ申鐃初ス鐃叔は¥申labelType鐃緒申VOIDOID鐃緒申鐃緒申鐃所す鐃暑こ鐃夙わ申鐃叔わ申鐃殉わ申鐃緒申 鐃初算鐃述ワ申鐃初ス鐃緒申鐃緒申鐃緒申鐃緒申鐃藷供わ申鐃緒申討鐃緒申鐃緒申鐃緒申鐃叔ッワ申鐃緒申鐃緒申鐃粛わ申胴鐃緒申曚任鐃緒申鐃夙わ申鐃熟¥申canReturnData鐃緒申true鐃祝わ申鐃殉わ申鐃緒申 attType鐃緒申鐃緒申鐃緒申長鐃叔¥申鐃初算鐃述ワ申鐃初ス鐃緒申鐃緒申鐃緒申鐃緒申鐃春わ申鐃塾件申鐃緒申鐃瞬わ申鐃祝わ申辰鐃縦刻申鐃緒申佑鐃淑�申鐃叔わ申鐃緒申箸鐃緒申砲里漾鐃�longValuesOK鐃緒申true鐃祝わ申鐃殉わ申(項54.3.1鐃緒申鐃緒申)鐃緒申
choose鐃緒申鐃緒申鐃緒申鐃竣ワ申某鐃緒申鐃緒申鐃緒申佑鐃緒申鐃緒申鐃緒申鐃緒申鐃夙わ申鐃塾メソ鐃獣ドわ申鐃緒申鐃薯しまわ申鐃緒申
鐃舜随申鐃緒申SQL鐃緒申鐃緒申楼焚鐃緒申里茲�申砲覆鐃殉わ申鐃緒申
CREATE FUNCTION my_choose(internal, internal) RETURNS void ...
1鐃緒申鐃旬の逸申鐃緒申鐃緒申C鐃緒申spgChooseIn鐃緒申造鐃塾へのポワ申鐃藷タで¥申鐃舜随申鐃緒申鐃緒申鐃熟デ¥申鐃緒申鐃緒申泙澆泙鐃緒申鐃� 2鐃緒申鐃旬の逸申鐃緒申鐃緒申C鐃緒申spgChooseOut鐃緒申造鐃塾へのポワ申鐃藷タで¥申鐃舜随申鐃緒申鐃緒申未離如鐃緒申鐃緒申鐃緒申鐃緒申鐃殉わ申鐃緒申
typedef struct spgChooseIn
{
Datum datum; /* original datum to be indexed */
Datum leafDatum; /* current datum to be stored at leaf */
int level; /* current level (counting from zero) */
/* Data from current inner tuple */
bool allTheSame; /* tuple is marked all-the-same? */
bool hasPrefix; /* tuple has a prefix? */
Datum prefixDatum; /* if so, the prefix value */
int nNodes; /* number of nodes in the inner tuple */
Datum *nodeLabels; /* node label values (NULL if none) */
} spgChooseIn;
typedef enum spgChooseResultType
{
spgMatchNode = 1, /* descend into existing node */
spgAddNode, /* add a node to the inner tuple */
spgSplitTuple /* split inner tuple (change its prefix) */
} spgChooseResultType;
typedef struct spgChooseOut
{
spgChooseResultType resultType; /* action code, see above */
union
{
struct /* results for spgMatchNode */
{
int nodeN; /* descend to this node (index from 0) */
int levelAdd; /* increment level by this much */
Datum restDatum; /* new leaf datum */
} matchNode;
struct /* results for spgAddNode */
{
Datum nodeLabel; /* new node's label */
int nodeN; /* where to insert it (index from 0) */
} addNode;
struct /* results for spgSplitTuple */
{
/* Info to form new inner tuple with one node */
bool prefixHasPrefix; /* tuple should have a prefix? */
Datum prefixPrefixDatum; /* if so, its value */
Datum nodeLabel; /* node's label */
/* Info to form new lower-level inner tuple with all old nodes */
bool postfixHasPrefix; /* tuple should have a prefix? */
Datum postfixPrefixDatum; /* if so, its value */
} splitTuple;
} result;
} spgChooseOut;
datum鐃熟ワ申鐃緒申妊奪鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃暑元鐃塾デ¥申鐃緒申鐃叔わ申鐃緒申
leafDatum鐃熟最緒申鐃�datum鐃緒申同鐃緒申鐃叔わ申鐃緒申鐃緒申choose鐃緒申鐃暑い鐃緒申picksplit鐃潤ソ鐃獣ドわ申鐃緒申鐃緒申鐃緒申儿鐃緒申鐃緒申鐃夙¥申鐃縦リー鐃塾わ申鐃緒申磴わ申鐃駿ワ申鐃緒申儿鐃緒申鐃緒申鐃暑こ鐃夙わ申鐃緒申鐃緒申泙鐃緒申鐃�
鐃緒申鐃緒申鐃緒申探鐃緒申鐃緒申鐃所ー鐃春のペ¥申鐃緒申鐃緒申鐃緒申達鐃緒申鐃緒申鐃夙わ申鐃緒申leafDatum鐃塾醐申鐃緒申鐃粛わ申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃所ー鐃春ワ申鐃竣ワ申乏鐃叔種申鐃緒申鐃緒申鐃粛となわ申泙鐃緒申鐃�
level鐃熟¥申鐃暑ー鐃夙ワ申戰鐃緒申0鐃夙わ申鐃銃¥申鐃緒申鐃淳わ申鐃緒申鐃緒申鐃緒申鐃竣ワ申離鐃駿ワ申鮗┐鐃緒申泙鐃緒申鐃�
鐃緒申鐃淳わ申鐃緒申鐃緒申鐃緒申鐃竣ルが複鐃緒申鐃緒申同鐃緒申鐃淑ノ¥申鐃宿わ申泙鐃夙わ申鐃銃逸申鐃緒申鐃春わ申鐃緒申鐃銃わ申鐃緒申箸鐃緒申鐃�allTheSame鐃緒申true鐃祝わ申鐃殉わ申(項54.3.3鐃緒申鐃緒申)鐃緒申
鐃緒申鐃淳わ申鐃緒申鐃緒申鐃緒申鐃竣ルが鐃緒申頭鐃緒申鐃緒申泙鐃夙わ申鐃緒申hasPrefix鐃緒申true鐃祝わ申鐃殉わ申鐃緒申
鐃緒申鐃塾とわ申鐃緒申prefixDatum鐃緒申鐃緒申鐃緒申鐃粛になわ申泙鐃緒申鐃�
nNodes鐃緒申鐃緒申鐃緒申鐃緒申鐃竣ルが鐃殉わ申劵痢鐃緒申匹凌鐃緒申如鐃�nodeLabels鐃熟わ申鐃緒申鐃塾ワ申戰鐃緒申佑鐃緒申鐃緒申鵝△鐃緒申襪わ申魯鐃駿ルが鐃淑わ申鐃緒申鐃�NULL鐃祝なわ申泙鐃緒申鐃�
choose鐃舜随申鐃熟¥申鐃緒申鐃緒申鐃緒申鐃粛わ申鐃緒申存鐃塾子ノ¥申鐃宿わ申1鐃縦とマッワ申鐃緒申鐃暑か鐃緒申鐃緒申鐃緒申鐃緒申鐃述ノ¥申鐃宿わ申鐃宿加わ申鐃緒申必鐃竣わ申鐃緒申鐃暑か鐃緒申鐃緒申鐃暑い鐃熟随申鐃緒申鐃緒申鐃粛わ申鐃緒申鐃竣ワ申鐃緒申鐃銃�申鐃緒申鐃重�申腓件申覆鐃緒申里鐃緒申鐃緒申鐃緒申鐃緒申廛鐃緒申分鐃巡し鐃銃わ申鐃緒申鐃緒申造里覆鐃緒申鐃銃�申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申必鐃竣わ申鐃緒申鐃暑か鐃緒申鐃緒申鐃緒申蠅刻申襪鰹申箸鐃緒申任鐃緒申泙鐃緒申鐃�
鐃緒申鐃緒申鐃緒申鐃粛わ申鐃緒申存鐃塾子ノ¥申鐃宿わ申1鐃縦にマッワ申鐃緒申鐃緒申鐃夙わ申鐃熟¥申resultType鐃緒申spgMatchNode鐃祝ワ申鐃獣トわ申鐃殉わ申鐃緒申 nodeN鐃熟ノ¥申鐃宿わ申鐃緒申鐃緒申鐃緒申里鐃緒申離痢鐃緒申匹鐃緒申峭鐃�(0鐃緒申鐃緒申)鐃祝ワ申鐃獣トわ申鐃殉わ申鐃緒申 levelAdd鐃熟¥申鐃緒申鐃塾ノ¥申鐃宿をたどって駕申鐃緒申鐃緒申箸鐃緒申鐃緒申鐃緒申鐃緒申鐃�level鐃緒申鐃緒申分鐃祝ワ申鐃獣トわ申鐃殉わ申鐃緒申鐃緒申鐃暑い鐃熟演算鐃述ワ申鐃初ス鐃緒申鐃緒申戰鐃緒申箸辰討鐃緒申覆鐃緒申鐃緒申0鐃塾ままにわ申鐃殉わ申鐃緒申 restDatum鐃熟¥申鐃初算鐃述ワ申鐃初ス鐃緒申鐃叔¥申鐃緒申鐃薯あわ申鐃駿ルか鐃初次鐃塾ワ申戰鐃緒申鐃術刻申鐃緒申鐃淑わ申鐃塾でわ申鐃緒申弌鐃�datum鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃獣トわ申鐃殉わ申鐃緒申鐃緒申鐃緒申鐃叔なわ申鐃緒申弌鐃緒申鐃緒申離鐃駿ワ申鐃�leafDatum鐃夙わ申鐃銃使わ申鐃暑修鐃緒申鐃緒申鐃曙た鐃粛にワ申鐃獣トわ申鐃殉わ申鐃緒申
鐃緒申鐃緒申鐃緒申鐃述ノ¥申鐃宿わ申鐃宿加わ申鐃淑わ申鐃緒申个覆鐃淑わ申鐃夙わ申鐃熟¥申resultType鐃緒申spgAddNode鐃祝ワ申鐃獣トわ申鐃殉わ申鐃緒申
nodeLabel鐃熟¥申鐃緒申鐃緒申鐃緒申鐃塾¥申鐃宿で使わ申鐃緒申鐃駿ワ申縫鐃緒申奪箸鐃緒申鐃�nodeN鐃熟ノ¥申鐃宿わ申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申離痢鐃緒申匹鐃緒申峭鐃�(0鐃緒申鐃緒申)鐃祝ワ申鐃獣トわ申鐃殉わ申鐃緒申
鐃塾¥申鐃宿わ申鐃宿加わ申鐃緒申鐃緒申如鐃�choose鐃舜随申鐃緒申鐃緒申鐃緒申鐃曙た鐃緒申鐃緒申鐃緒申鐃竣ワ申鐃夙って再び呼び出わ申鐃殉わ申鐃緒申鐃緒申鐃緒申鐃塾とわ申鐃熟¥申spgMatchNode鐃夙わ申鐃緒申鐃緒申未砲覆鐃熟わ申鐃叔わ申鐃緒申
鐃緒申鐃緒申鐃緒申鐃粛わ申鐃緒申鐃竣ワ申鐃緒申鐃銃�申鐃緒申鐃重�申腓件申覆鐃緒申箸鐃緒申蓮鐃�resultType鐃緒申spgSplitTuple鐃祝ワ申鐃獣トわ申鐃殉わ申鐃緒申
鐃緒申鐃塾ワ申鐃緒申鐃緒申鐃緒申鐃熟¥申鐃緒申鐃駿ての器申存鐃塾ノ¥申鐃宿を新わ申鐃緒申鐃緒申未鐃緒申鐃緒申鐃緒申鐃緒申廛鐃祝逸申動鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申未鐃緒申鐃緒申鐃緒申鐃緒申廛鐃祝ワ申鵐�鐃緒申鐃獣縁申鐃塾ノ¥申鐃宿わ申鐃緒申朕鐃緒申鐃緒申鐃緒申鐃緒申廛鐃叔器申存鐃塾ワ申鐃竣ワ申鐃緒申峇鐃緒申鐃緒申泙鐃緒申鐃�
prefixHasPrefix鐃熟随申鐃緒申鐃緒申鐃緒申未離鐃緒申廛襪�申鐃銃�申鐃緒申鐃緒申鐃縦わ申鐃宿わ申鐃緒申鐃薯示わ申鐃緒申鐃緒申鐃縦常申鐃祝わ申prefixPrefixDatum鐃薯そわ申鐃緒申頭鐃緒申鐃緒申鐃粛にワ申鐃獣トわ申鐃殉わ申鐃緒申
鐃緒申鐃緒申妊奪鐃緒申鐃緒申鐃緒申媛辰鐃緒申鐃暑新鐃緒申鐃緒申鐃粛わ申鐃緒申鐃緒申鐃緒申鐃暑た鐃潤、鐃緒申鐃緒申鐃緒申鐃緒申頭鐃緒申鐃緒申鐃粛は醐申鐃塾わ申里鐃緒申鐃緒申鐃緒申造隆砲鐃緒申鐃塾になってわ申鐃緒申必鐃竣わ申鐃緒申鐃所、鐃殉わ申鐃緒申鐃緒申鐃緒申頭鐃緒申鐃緒申鐃縦刻申鐃緒申呂覆鐃殉わ申鐃緒申
nodeLabel鐃熟¥申鐃緒申鐃緒申鐃緒申鐃緒申未鐃緒申鐃緒申鐃緒申鐃緒申廛鐃緒申悗鐃緒申鐃緒申鐃緒申痢鐃緒申匹濃箸鐃緒申鐃緒申戰鐃祝ワ申鐃獣トわ申鐃殉わ申鐃緒申
postfixHasPrefix鐃熟¥申鐃緒申鐃緒申鐃緒申鐃緒申未離鐃緒申廛襪�申鐃銃�申鐃緒申鐃緒申鐃縦わ申鐃宿わ申鐃緒申鐃薯示わ申鐃緒申鐃緒申鐃縦とわ申鐃祝わ申postfixPrefixDatum鐃緒申鐃緒申頭鐃緒申鐃緒申鐃粛にワ申鐃獣トわ申鐃殉わ申鐃緒申
鐃緒申鐃緒申鐃緒申鐃緒申未飽鐃銃逸申鐃緒申鐃緒申鐃緒申廛鐃塾ノ¥申鐃宿のワ申戰鐃緒申鐃術刻申鐃緒申鐃暑機鐃緒申癲�申劼離鐃緒申鐃叔ッワ申鐃緒申鐃塾ワ申鐃緒申肇鐃緒申鐃術刻申鐃緒申鐃暑機鐃緒申發�申鐃殉わ申鐃藷から、鐃緒申鐃緒申鐃�2鐃縦わ申鐃緒申頭鐃緒申鐃緒申鐃宿加のワ申戰鐃緒申鐃夙み刻申錣誌申蓮鐃緒申鐃緒申鐃緒申鐃銃�申鐃緒申鐃銃縁申鐃緒申鐃縮o申鐃緒申鐃緒申必鐃竣わ申鐃緒申鐃緒申泙鐃緒申鐃�
鐃塾¥申鐃宿わ申分鐃巡さ鐃曙た鐃緒申如鐃�choose鐃緒申鐃瞬器申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃竣ワ申鐃夙って再び呼び出わ申鐃殉わ申鐃緒申
鐃緒申鐃塾呼び出わ申鐃熟¥申鐃縮常申鐃�spgAddNode鐃夙わ申鐃緒申鐃緒申未砲覆鐃殉わ申鐃緒申鐃夙わ申鐃緒申鐃塾は¥申分鐃緒申離鐃緒申謄奪廚鐃緒申媛辰鐃緒申譴随申痢鐃緒申匹離鐃駿ワ申篭鐃緒申蕕�申鐃緒申鐃緒申鐃緒申佑肇泪奪鐃緒申鐃緒申覆鐃緒申鐃緒申鐃叔わ申鐃緒申
鐃緒申鐃獣て¥申鐃緒申鐃塾後、3鐃緒申鐃旬の呼び出わ申鐃叔わ申辰鐃�spgMatchNode鐃緒申鐃瞬り、鐃所ー鐃春ワ申戰鐃祝駕申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申能鐃夙なわ申泙鐃緒申鐃�
picksplit鐃所ー鐃春ワ申鐃竣ワ申僚鐃緒申鐃緒申鐃出わ申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃竣ワ申鐃宿わ申鐃緒申辰萄鐃暑か鐃緒申鐃緒申蠅件申泙鐃緒申鐃�
鐃舜随申鐃緒申SQL鐃緒申鐃緒申楼焚鐃緒申里茲�申砲覆鐃殉わ申鐃緒申
CREATE FUNCTION my_picksplit(internal, internal) RETURNS void ...
1鐃緒申鐃旬の逸申鐃緒申鐃緒申C鐃緒申spgPickSplitIn鐃緒申造鐃塾へのポワ申鐃藷タで¥申鐃舜随申鐃緒申鐃緒申鐃熟デ¥申鐃緒申鐃緒申泙澆泙鐃緒申鐃� 2鐃緒申鐃旬の逸申鐃緒申鐃緒申C鐃緒申spgPickSplitOut鐃緒申造鐃塾へのポワ申鐃藷タで¥申鐃舜随申鐃緒申鐃緒申未離如鐃緒申鐃緒申鐃緒申鐃緒申鐃殉わ申鐃緒申
typedef struct spgPickSplitIn
{
int nTuples; /* number of leaf tuples */
Datum *datums; /* their datums (array of length nTuples) */
int level; /* current level (counting from zero) */
} spgPickSplitIn;
typedef struct spgPickSplitOut
{
bool hasPrefix; /* new inner tuple should have a prefix? */
Datum prefixDatum; /* if so, its value */
int nNodes; /* number of nodes for new inner tuple */
Datum *nodeLabels; /* their labels (or NULL for no labels) */
int *mapTuplesToNodes; /* node index for each leaf tuple */
Datum *leafTupleDatums; /* datum to store in each new leaf tuple */
} spgPickSplitOut;nTuples鐃緒申鐃緒申鐃熟わ申鐃緒申鐃所ー鐃春ワ申鐃竣ワ申慮朕鐃緒申任鐃緒申鐃� datums鐃熟デ¥申鐃緒申鐃緒申鐃粛わ申鐃緒申鐃緒申任鐃緒申鐃� level鐃熟わ申鐃駿てのリー鐃春ワ申鐃竣ワ申慮鐃緒申澆離鐃駿ワ申如鐃緒申鐃緒申譴�申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申廛鐃塾ワ申戰鐃祝なわ申泙鐃緒申鐃�
hasPrefix鐃熟随申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃竣ルが鐃緒申頭鐃緒申鐃緒申鐃緒申弔鐃緒申匹鐃緒申鐃緒申鮗┐鐃緒申鐃緒申鐃緒申直鐃緒申鐃�prefixDatum鐃緒申鐃緒申頭鐃緒申鐃緒申鐃粛にワ申鐃獣トわ申鐃殉わ申鐃緒申
nNodes鐃熟随申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃竣ルが鐃殉わ申痢鐃緒申匹凌鐃緒申鮗┐鐃緒申鐃�nodeLabels鐃熟わ申鐃塾ワ申戰鐃緒申佑鐃緒申鐃緒申鐃祝ワ申鐃獣トわ申鐃殉わ申鐃緒申
(鐃塾¥申鐃宿わ申鐃緒申戰鐃緒申必鐃竣とわ申鐃淑わ申鐃夙わ申鐃熟¥申nodeLabels鐃緒申NULL鐃祝ワ申鐃獣トわ申鐃殉わ申鐃緒申鐃旬細わ申項54.3.2鐃薯参照わ申鐃銃わ申鐃緒申鐃緒申鐃緒申鐃緒申)
mapTuplesToNodes鐃熟¥申鐃緒申鐃曙ぞ鐃緒申離蝓種申侫鐃緒申廛襪�申鐃緒申鐃緒申鐃銃わ申鐃緒申痢鐃緒申匹鐃緒申峭鐃�(0鐃緒申鐃緒申)鐃緒申鐃緒申鐃緒申縫鐃緒申奪箸鐃緒申泙鐃緒申鐃�
leafTupleDatums鐃熟随申鐃緒申鐃緒申鐃所ー鐃春ワ申鐃竣ワ申乏鐃叔種申鐃緒申鐃緒申鐃粛わ申鐃緒申鐃緒申縫鐃緒申奪箸鐃緒申泙鐃�(鐃初算鐃述ワ申鐃初ス鐃緒申鐃叔¥申鐃緒申鐃薯あわ申鐃駿ルか鐃初次鐃塾ワ申戰鐃緒申鐃術刻申鐃緒申鐃淑わ申鐃緒申个鐃緒申鐃緒申鐃緒申鐃緒申呂鐃�datums鐃緒申同鐃緒申鐃祝なわ申泙鐃�)鐃緒申
picksplit鐃舜随申鐃熟¥申nodeLabels鐃緒申mapTuplesToNodes鐃緒申leafTupleDatums鐃緒申鐃緒申鐃緒申砲弔鐃緒申鐃�palloc鐃緒申鐃淑わ申鐃緒申个覆鐃淑わ申鐃緒申鐃夙わ申鐃緒申鐃春わ申鐃銃わ申鐃緒申鐃緒申鐃緒申鐃緒申
2鐃縦以常申離蝓種申侫鐃緒申廛鐃緒申与鐃緒申鐃緒申鐃緒申隋�picksplit鐃舜随申鐃熟わ申鐃緒申鐃緒申2鐃縦以常申離痢鐃緒申匹鐃淑�申爐刻申鐃緒申予鐃循わ申鐃緒申泙鐃緒申鐃緒申鐃緒申鐃緒申任覆鐃緒申鐃出¥申鐃所ー鐃春ワ申鐃竣ワ申鐃淑o申鐃緒申離據鐃緒申鐃緒申砲泙鐃緒申鐃緒申辰鐃淑�申笋刻申鐃夙わ申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃塾居申砲鐃緒申鐃重�申鐃渋醐申鐃叔わ申鐃淑わ申鐃緒申鐃緒申任鐃緒申鐃�
鐃緒申鐃獣て¥申picksplit鐃緒申鐃緒申鐃駿てのリー鐃春ワ申鐃竣ワ申鐃銃縁申鐃緒申痢鐃緒申匹鐃緒申屬鐃緒申鐃緒申箸砲覆辰鐃緒申鐃緒申砲蓮鐃�SP-GiST鐃塾ワ申鐃緒申鐃塾ワ申鐃緒申鐃宿わ申鐃緒申鐃塾件申鐃緒申鐃淑わ申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申廛鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃淑o申鐃緒申鐃銃縁申鐃塾ワ申戰襪�申佞鐃緒申鐃曙た鐃塾¥申鐃宿に¥申鐃所ー鐃春ワ申鐃竣ルが無鐃緒申戮乏鐃緒申鐃緒申鐃銃わ申鐃殉わ申鐃緒申
鐃緒申鐃塾よう鐃淑ワ申鐃竣ワ申蓮鐃緒申鐃緒申里鐃緒申箸鐃夙�申鐃緒申鐃緒申鐃緒申鐃緒申箸鐃緒申鐃緒申鐃緒申鐃緒申襪随申瓠�allTheSame鐃夙逸申鐃緒申鐃縦わ申鐃緒申鐃殉わ申鐃緒申
choose鐃舜随申鐃緒申inner_consistent鐃舜随申鐃熟¥申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃竣ワ申砲弔鐃緒申董鐃重�申擇鐃緒申鐃緒申佞鬚靴銅鐃所扱鐃緒申覆鐃緒申鐃出なわ申泙鐃緒申鐃�
鐃旬細な常申鐃緒申鐃�項54.3.3鐃薯参照わ申鐃銃わ申鐃緒申鐃緒申鐃緒申鐃緒申
config鐃舜随申鐃緒申longValuesOK鐃緒申true鐃祝ワ申鐃獣トわ申鐃緒申1鐃准¥申鐃緒申鐃緒申鐃緒申鐃順き鐃緒申鐃緒申鐃緒申鐃粛わ申与鐃緒申鐃緒申鐃緒申砲里漾鐃�picksplit鐃緒申1鐃縦わ申鐃緒申鐃塾リー鐃春ワ申鐃竣ワ申鐃重�申僂任鐃緒申泙鐃緒申鐃�
鐃緒申鐃塾常申鐃緒申鐃緒申鐃塾緒申鐃竣わ申鐃緒申鐃熟¥申鐃緒申頭鐃緒申鐃緒申呂鐃緒申鐃緒申董鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申短鐃緒申鐃所ー鐃春デ¥申鐃緒申鐃緒申鐃粛わ申鐃緒申鐃緒申鐃緒申鐃暑こ鐃夙でわ申鐃緒申
鐃緒申鐃塾呼出は¥申1鐃准¥申鐃緒申鐃祝種申鐃殉わ申短鐃緒申鐃塾リー鐃春デ¥申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃殉で件申鐃緒申鐃瞬わ申鐃緒申泙鐃緒申鐃�
鐃旬細な常申鐃緒申鐃�項54.3.1鐃薯参照わ申鐃銃わ申鐃緒申鐃緒申鐃緒申鐃緒申
inner_consistent鐃縦リー鐃緒申探鐃緒申鐃叔わ申鐃宿わ申戮鐃緒申痢鐃緒申鐃�(鐃緒申)鐃塾緒申鐃緒申鐃緒申屬鐃緒申泙鐃緒申鐃�
鐃舜随申鐃緒申SQL鐃緒申鐃緒申楼焚鐃緒申里茲�申砲覆鐃殉わ申鐃緒申
CREATE FUNCTION my_inner_consistent(internal, internal) RETURNS void ...
1鐃緒申鐃旬の逸申鐃緒申鐃緒申C鐃緒申spgInnerConsistentIn鐃緒申造鐃塾へのポワ申鐃藷タで¥申鐃舜随申鐃緒申鐃緒申鐃熟デ¥申鐃緒申鐃緒申泙澆泙鐃緒申鐃� 2鐃緒申鐃旬の逸申鐃緒申鐃緒申C鐃緒申spgInnerConsistentOut鐃緒申造鐃塾へのポワ申鐃藷タで¥申鐃舜随申鐃緒申鐃緒申未離如鐃緒申鐃緒申鐃緒申鐃緒申鐃殉わ申鐃緒申
typedef struct spgInnerConsistentIn
{
ScanKey scankeys; /* array of operators and comparison values */
int nkeys; /* length of array */
Datum reconstructedValue; /* value reconstructed at parent */
int level; /* current level (counting from zero) */
bool returnData; /* original data must be returned? */
/* Data from current inner tuple */
bool allTheSame; /* tuple is marked all-the-same? */
bool hasPrefix; /* tuple has a prefix? */
Datum prefixDatum; /* if so, the prefix value */
int nNodes; /* number of nodes in the inner tuple */
Datum *nodeLabels; /* node label values (NULL if none) */
} spgInnerConsistentIn;
typedef struct spgInnerConsistentOut
{
int nNodes; /* number of child nodes to be visited */
int *nodeNumbers; /* their indexes in the node array */
int *levelAdds; /* increment level by this much for each */
Datum *reconstructedValues; /* associated reconstructed values */
} spgInnerConsistentOut;
鐃緒申鐃緒申scankeys鐃緒申長鐃緒申鐃緒申nkeys鐃叔¥申鐃緒申鐃緒申妊奪鐃緒申鐃緒申鐃緒申鐃緒申両鐃緒申魑Ⅸ劼鐃緒申泙鐃緒申鐃�
複鐃緒申鐃塾常申鐃緒申AND鐃叔件申腓居申鐃殉わ申鐃緒申鐃縦まり、鐃緒申鐃塾わ申鐃駿てわ申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申妊奪鐃緒申鐃緒申鐃緒申鐃夙ワ申里澆鐃緒申仂櫃箸覆鐃殉わ申鐃緒申
(nkeys鐃緒申0鐃淑わ申弌鐃緒申鐃緒申戮討離鐃緒申鐃夙リが鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃夙になる、鐃夙わ申鐃緒申鐃緒申鐃夙わ申鐃緒申鐃春わ申鐃銃わ申鐃緒申鐃緒申鐃緒申鐃緒申)
鐃縮常、consistent鐃舜随申鐃叔は¥申鐃緒申鐃緒申里鐃緒申譴常申鐃塾ワ申鐃緒申肇鐃緒申sk_strategy鐃緒申鐃緒申鐃�sk_argument鐃春ワ申鐃緒申鐃緒申匹里澆鐃緒申鐃緒申鐃夙なわ申泙鐃緒申鐃緒申鐃緒申鐃緒申離侫鐃緒申鐃緒申鐃宿にはわ申鐃曙ぞ鐃曙イ鐃緒申妊奪鐃緒申鐃緒申佞鐃緒申鐃叔緒申扮藥誌申劼鐃緒申鐃緒申鐃粛わ申鐃緒申鐃緒申泙鐃緒申鐃�
鐃淑わ申鐃緒申鐃緒申鐃緒申佑鐃�NULL鐃緒申鐃宿わ申鐃緒申鐃緒申鐃叔э申鐃緒申襪随申鐃緒申sk_flags鐃薯検削申鐃緒申鐃緒申必鐃竣はわ申鐃緒申泙鐃緒申鵝�覆鐃緒申覆鐃�SP-GiST鐃塾ワ申鐃緒申鐃塾ワ申鐃緒申鐃宿わ申鐃緒申鐃塾よう鐃淑常申鐃緒申鐃緒申鐃緒申鐃緒申襪�申鐃叔わ申鐃緒申
reconstructedValue鐃熟親ワ申鐃竣ワ申里鐃緒申鐃祝再刻申鐃循わ申鐃曙た鐃粛で¥申鐃暑ー鐃夙ワ申戰鐃塾常申隋�申鐃緒申襪わ申録謄鐃駿ワ申鐃�inner_consistent鐃舜随申鐃緒申鐃粛わ申鐃瞬わ申鐃淑わ申鐃獣わ申鐃緒申鐃緒申(Datum) 0鐃夙なわ申泙鐃緒申鐃�
level鐃熟醐申鐃淳わ申鐃緒申鐃緒申鐃緒申鐃竣ワ申離鐃駿ワ申髻▲襦種申肇鐃駿ワ申鐃�0鐃夙わ申鐃銃随申鐃緒申鐃緒申鐃緒申里任鐃緒申鐃�
returnData鐃熟¥申鐃緒申鐃緒申鐃巡い鐃緒申錣誌申悩胴鐃緒申曚鐃緒申譴随申如鐃緒申鐃緒申鐃宿�申廚幣鐃緒申鐃�true鐃夙なわ申泙鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申config鐃舜随申鐃緒申canReturnData鐃緒申鐃叔э申鐃緒申鐃緒申鐃緒申砲里漾鐃緒申鐃緒申鐃緒申覆鐃殉わ申鐃緒申
allTheSame鐃熟¥申鐃緒申鐃淳わ申鐃緒申鐃緒申鐃緒申鐃竣ワ申鐃�"all-the-same"鐃塾逸申鐃緒申鐃春わ申鐃銃わ申鐃緒申鐃緒申鐃�true鐃祝なわ申泙鐃緒申鐃緒申鐃緒申両鐃順、鐃緒申鐃駿てのノ¥申鐃宿わ申(鐃緒申戰襪�申鐃緒申鐃緒申)同鐃緒申鐃緒申戰鐃緒申鐃緒申辰討鐃緒申泙鐃緒申鐃緒申蕁�申鐃緒申里鐃緒申戮討鐃緒申笋わ申鐃緒せ鐃祝マッワ申鐃緒申鐃暑か鐃緒申鐃緒申鐃緒申鐃緒申鐃殉ッワ申鐃緒申鐃淑わ申鐃緒申鐃塾わ申鐃緒申鐃曙か鐃祝なわ申泙鐃�(項54.3.3鐃緒申鐃緒申)鐃緒申
hasPrefix鐃熟醐申鐃淳わ申鐃緒申鐃緒申鐃緒申鐃竣ルが鐃緒申頭鐃緒申鐃緒申鐃緒申辰討鐃緒申鐃緒申鐃緒申true鐃夙なり、鐃緒申鐃塾とわ申prefixDatum鐃緒申鐃緒申鐃緒申鐃粛となわ申泙鐃緒申鐃�
nNodes鐃緒申鐃緒申鐃緒申鐃緒申鐃竣ルが鐃殉わ申劵痢鐃緒申匹凌鐃緒申任鐃緒申鐃�nodeLabels鐃熟わ申鐃緒申鐃塾ワ申戰鐃緒申佑鐃緒申鐃緒申鐃叔¥申鐃塾¥申鐃宿にワ申戰襪�申覆鐃緒申箸鐃緒申鐃�NULL鐃祝なわ申泙鐃緒申鐃�
nNodes鐃緒申探鐃緒申鐃緒申訪鐃緒申鐃宿�申廚里鐃緒申鐃述ノ¥申鐃宿の随申鐃祝ワ申鐃獣トわ申鐃緒申覆鐃緒申鐃出なわ申泙鐃緒申鵝�泙鐃緒申鐃�nodeNumbers鐃熟わ申鐃緒申鐃緒申鐃瞬刻申鐃緒申鐃緒申鐃祝ワ申鐃獣トわ申鐃緒申覆鐃緒申鐃出なわ申泙鐃緒申鐃�
鐃初算鐃述ワ申鐃初ス鐃緒申鐃緒申戰鐃緒申道襪件申討鐃緒申鐃夙わ申鐃熟¥申鐃緒申鐃曙ぞ鐃緒申離痢鐃緒申匹悗伐鐃緒申辰鐃祝�申鐃緒申箸鐃緒申鐃宿�申廚淵鐃駿ワ申鐃緒申鐃淑�申鐃緒申鐃緒申鐃緒申levelAdds鐃祝ワ申鐃獣トわ申鐃殉わ申鐃緒申
(鐃緒申鐃緒申鐃緒申分鐃熟わ申鐃駿てのノ¥申鐃宿につわ申鐃緒申同鐃緒申鐃祝なるこ鐃夙わ申多鐃緒申鐃叔わ申鐃緒申鐃緒申必鐃緒申鐃緒申鐃盾そ鐃緒申鐃淑わ申箸聾造鐃淑わ申鐃塾わ申鐃緒申鐃藷が使わ申鐃殉わ申鐃緒申)
鐃粛の再刻申鐃循わ申必鐃竣なとわ申鐃祝は¥申訪鐃緒申襪緒申譴常申鐃塾子ノ¥申鐃宿につわ申鐃銃再刻申鐃循わ申鐃曙た鐃粛わ申鐃緒申鐃緒申鐃�reconstructedValues鐃祝ワ申鐃獣トわ申鐃殉わ申鐃緒申鐃銃刻申鐃循わ申必鐃竣でなわ申鐃緒申弌鐃�reconstructedValues鐃緒申NULL鐃塾ままにわ申鐃殉わ申鐃緒申
inner_consistent鐃舜随申鐃熟¥申nodeNumbers鐃緒申levelAdds鐃緒申reconstructedValues鐃緒申鐃緒申鐃緒申砲弔鐃緒申鐃�palloc鐃緒申鐃淑わ申鐃緒申个覆鐃淑わ申鐃緒申鐃夙わ申鐃緒申鐃春わ申鐃銃わ申鐃緒申鐃緒申鐃緒申鐃緒申
leaf_consistent鐃所ー鐃春ワ申鐃竣ルが鐃巡い鐃緒申錣誌申鐃緒申鐃緒申鐃緒申鐃緒申鐃順、true鐃緒申鐃瞬わ申鐃殉わ申鐃緒申
鐃舜随申鐃緒申SQL鐃緒申鐃緒申楼焚鐃緒申里茲�申砲覆鐃殉わ申鐃緒申
CREATE FUNCTION my_leaf_consistent(internal, internal) RETURNS bool ...
1鐃緒申鐃旬の逸申鐃緒申鐃緒申C鐃緒申spgLeafConsistentIn鐃緒申造鐃塾へのポワ申鐃藷タで¥申鐃舜随申鐃緒申鐃緒申鐃熟デ¥申鐃緒申鐃緒申泙澆泙鐃緒申鐃� 2鐃緒申鐃旬の逸申鐃緒申鐃緒申C鐃緒申spgLeafConsistentOut鐃緒申造鐃塾へのポワ申鐃藷タで¥申鐃舜随申鐃緒申鐃緒申未離如鐃緒申鐃緒申鐃緒申鐃緒申鐃殉わ申鐃緒申
typedef struct spgLeafConsistentIn
{
ScanKey scankeys; /* array of operators and comparison values */
int nkeys; /* length of array */
Datum reconstructedValue; /* value reconstructed at parent */
int level; /* current level (counting from zero) */
bool returnData; /* original data must be returned? */
Datum leafDatum; /* datum in leaf tuple */
} spgLeafConsistentIn;
typedef struct spgLeafConsistentOut
{
Datum leafValue; /* reconstructed original data, if any */
bool recheck; /* set true if operator must be rechecked */
} spgLeafConsistentOut;
鐃緒申鐃緒申scankeys鐃緒申長鐃緒申鐃緒申nkeys鐃叔¥申鐃緒申鐃緒申妊奪鐃緒申鐃獣居申鐃緒申両鐃緒申魑Ⅸ劼鐃緒申泙鐃緒申鐃�
複鐃緒申鐃塾常申鐃緒申AND鐃叔件申腓居申鐃殉わ申鐃緒申鐃縦まり、鐃緒申鐃塾わ申鐃駿てわ申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申妊奪鐃緒申鐃緒申鐃緒申鐃夙ワ申里澆鐃緒申仂櫃箸覆鐃殉わ申鐃緒申
(nkeys鐃緒申0鐃淑わ申弌鐃緒申鐃緒申戮討離鐃緒申鐃夙リが鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃夙になる、鐃夙わ申鐃緒申鐃緒申鐃夙わ申鐃緒申鐃春わ申鐃銃わ申鐃緒申鐃緒申鐃緒申鐃緒申)
鐃縮常、consistent鐃舜随申鐃叔は¥申鐃緒申鐃緒申里鐃緒申譴常申鐃塾ワ申鐃緒申肇鐃緒申sk_strategy鐃緒申鐃緒申鐃�sk_argument鐃春ワ申鐃緒申鐃緒申匹里澆鐃緒申鐃緒申鐃夙なわ申泙鐃緒申鐃緒申鐃緒申鐃緒申離侫鐃緒申鐃緒申鐃宿にはわ申鐃曙ぞ鐃曙イ鐃緒申妊奪鐃緒申鐃緒申佞鐃緒申鐃叔緒申扮藥誌申劼鐃緒申鐃緒申鐃粛わ申鐃緒申鐃緒申泙鐃緒申鐃�
鐃淑わ申鐃緒申鐃緒申鐃緒申佑鐃�NULL鐃緒申鐃宿わ申鐃緒申鐃緒申鐃叔э申鐃緒申襪随申鐃緒申sk_flags鐃薯検削申鐃緒申鐃緒申必鐃竣はわ申鐃緒申泙鐃緒申鵝�覆鐃緒申覆鐃�SP-GiST鐃塾ワ申鐃緒申鐃塾ワ申鐃緒申鐃宿わ申鐃緒申鐃塾よう鐃淑常申鐃緒申鐃緒申鐃緒申鐃緒申襪�申鐃叔わ申鐃緒申
reconstructedValue鐃熟親ワ申鐃竣ワ申里鐃緒申鐃祝再刻申鐃循わ申鐃曙た鐃粛で¥申鐃暑ー鐃夙ワ申戰鐃塾常申隋�申鐃緒申襪わ申録謄鐃駿ワ申鐃�inner_consistent鐃舜随申鐃緒申鐃粛わ申鐃瞬わ申鐃淑わ申鐃獣わ申鐃緒申鐃緒申(Datum) 0鐃夙なわ申泙鐃緒申鐃�
level鐃熟醐申鐃淳のリー鐃春ワ申鐃竣ワ申離鐃駿ワ申髻▲襦種申肇鐃駿ワ申鐃�0鐃夙わ申鐃銃随申鐃緒申鐃緒申鐃緒申里任鐃緒申鐃�
returnData鐃熟¥申鐃緒申鐃緒申鐃巡い鐃緒申錣誌申悩胴鐃緒申曚鐃緒申譴随申如鐃緒申鐃緒申鐃宿�申廚幣鐃緒申鐃�true鐃夙なわ申泙鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申config鐃舜随申鐃緒申canReturnData鐃緒申鐃叔э申鐃緒申鐃緒申鐃緒申砲里漾鐃緒申鐃緒申鐃緒申覆鐃殉わ申鐃緒申
leafDatum鐃熟醐申鐃淳のリー鐃春ワ申鐃竣ワ申乏鐃叔種申鐃緒申鐃銃わ申鐃暑鍵鐃緒申鐃粛でわ申鐃緒申
鐃緒申鐃塾関随申鐃熟¥申鐃所ー鐃春ワ申鐃竣ルが鐃巡い鐃緒申錣誌申縫泪奪鐃緒申鐃緒申鐃緒申true鐃緒申鐃瞬わ申鐃緒申鐃殉ッワ申鐃緒申鐃淑わ申鐃緒申鐃�false鐃緒申鐃瞬わ申鐃殉わ申鐃緒申 true鐃塾常申隋�returnData鐃緒申true鐃叔わ申鐃緒申弌鐃�leafValue鐃熟¥申鐃緒申鐃塾リー鐃春ワ申鐃竣ワ申縫鐃緒申鐃叔ッワ申鐃緒申鐃春わ申鐃緒申鐃暑た鐃緒申妨鐃緒申鐃緒申鷆,鐃緒申譴随申佑縫鐃緒申奪箸鐃緒申鐃淑わ申鐃緒申个覆鐃殉わ申鐃緒申 鐃殉わ申鐃緒申鐃殉ッワ申鐃緒申鐃暑か鐃宿わ申鐃緒申鐃緒申鐃峻確実で¥申鐃殉ッワ申鐃緒申鐃暑か鐃塾鰹申認鐃塾わ申鐃緒申房尊櫃離辧鐃緒申廛鐃緒申廛鐃祝演算鐃述わ申鐃重�申僂鐃緒申覆鐃緒申鐃出なわ申覆鐃緒申箸鐃緒申蓮鐃�recheck鐃緒申true鐃祝ワ申鐃獣トわ申鐃緒申襪鰹申箸鐃緒申鐃緒申鐃殉わ申鐃緒申
SP-GiST鐃塾わ申鐃駿てのワ申鐃楯¥申鐃夙メソ鐃獣ドは¥申鐃縮常申鐃獣誌申鐃緒申鐃粛㍼申鐃緒申淵鐃緒申螢鰹申鐃銃ワ申鐃緒申鐃緒申鐃緒申埜討喀个鐃緒申鐃殉わ申鐃緒申鐃縦まり、鐃緒申鐃曙ぞ鐃緒申離鐃緒申廛鐃祝つわ申鐃銃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃�CurrentMemoryContext鐃熟リセ鐃獣トわ申鐃緒申泙鐃緒申鐃�
鐃緒申鐃緒申鐃緒申鐃獣て¥申palloc鐃緒申鐃緒申鐃緒申里鐃緒申戮討砲弔鐃緒申鐃�pfree鐃緒申鐃暑こ鐃夙を気にわ申鐃緒申鐃暑こ鐃夙はわ申鐃殉わ申鐃緒申廚任呂鐃緒申鐃殉わ申鐃緒申
(config鐃潤ソ鐃獣ドわ申鐃純外鐃叔¥申鐃緒申鐃緒申蝓種申鐃緒申鐃緒申鬚韻鐃処う鐃祝わ申鐃緒申必鐃竣わ申鐃緒申鐃緒申泙鐃緒申鐃�
鐃緒申鐃緒申鐃緒申鐃緒申鐃縮常申鐃�config鐃潤ソ鐃獣ドは¥申鐃術ワ申瓠種申鐃緒申箸鐃緒申鐃緒申呂鐃緒申譴随申鐃渋わ申里鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申奮鐃緒申鐃緒申鐃緒申發刻申鐃宿�申廚鐃緒申鐃緒申鐃殉わ申鐃緒申)
鐃緒申鐃緒申妊奪鐃緒申鐃緒申佞鐃緒申鐃緒申譴随申鵑�塙鐃緒申能鐃淑デ¥申鐃緒申鐃緒申鐃塾常申隋�申鐃緒申鐃叔ッワ申鐃緒申鐃塾照刻申蓮鐃宿醐申鐃重�申鐃�PG_GET_COLLATION()鐃塾誌申鐃夙みわ申箸辰討鐃緒申戮討離鐃緒申檗鐃緒申肇瓮緒申奪匹鐃緒申呂鐃緒申鐃殉わ申鐃緒申