{"kind": "hook", "major": "18", "item": {"slug": "set_rel_pathlist_hook", "name": "set_rel_pathlist_hook", "name_zh": "set_rel_pathlist_hook", "category": "Query planning", "summary": "Hook for plugins to get control in set_rel_pathlist()", "aliases": [], "versions": {"10": {"facts": [{"label": "Interface type", "value": "set_rel_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/10/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "REL_10_STABLE", "label": "10", "major": "10", "channel": "historical", "revision": "f4e8f137bfb08a664c8288824c1e36b5143ac875"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/f4e8f137bfb08a664c8288824c1e36b5143ac875/src/include/optimizer/paths.h#L29", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "e92f974fb44e1de3a6c550466b600af972c299c02d8d06c2a343ba339e224ce0"}, {"url": "https://github.com/postgres/postgres/blob/f4e8f137bfb08a664c8288824c1e36b5143ac875/src/backend/optimizer/path/allpaths.c#L64", "path": "src/backend/optimizer/path/allpaths.c", "label": "Core definition", "sha256": "b9c72dfc75f4354dad3a64d886b8760197c0cf6496f40228e6341bcaf5389671"}, {"url": "https://github.com/postgres/postgres/blob/f4e8f137bfb08a664c8288824c1e36b5143ac875/src/backend/optimizer/path/allpaths.c#L488", "path": "src/backend/optimizer/path/allpaths.c", "label": "Call sites", "sha256": "b9c72dfc75f4354dad3a64d886b8760197c0cf6496f40228e6341bcaf5389671"}], "sections": [{"title": "Core source comments", "paragraphs": ["Allow a plugin to editorialize on the set of Paths for this base relation. It could add new paths (such as CustomPaths) by calling add_path(), or add_partial_path() if parallel aware. It could also delete or modify paths added by the core code."]}, {"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/allpaths.c:488"]}, {"code": "\t * Allow a plugin to editorialize on the set of Paths for this base\n\t * relation.  It could add new paths (such as CustomPaths) by calling\n\t * add_path(), or add_partial_path() if parallel aware.  It could also\n\t * delete or modify paths added by the core code.\n\t */\n\tif (set_rel_pathlist_hook)\n\t\t(*set_rel_pathlist_hook) (root, rel, rti, rte);\n\n\t/*\n\t * If this is a baserel, we should normally consider gathering any partial\n\t * paths we may have created for it.  We have to do this after calling the\n\t * set_rel_pathlist_hook, else it cannot add partial paths to be included\n\t * here.\n\t *\n\t * However, if this is an inheritance child, skip it.  Otherwise, we could", "title": "Core call context: src/backend/optimizer/path/allpaths.c:482\u2013496", "paragraphs": []}], "signature": "typedef void (*set_rel_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte);\nextern PGDLLIMPORT set_rel_pathlist_hook_type set_rel_pathlist_hook;", "description": ["Hook for plugins to get control in set_rel_pathlist()"]}, "11": {"facts": [{"label": "Interface type", "value": "set_rel_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/11/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "REL_11_STABLE", "label": "11", "major": "11", "channel": "historical", "revision": "170e416034ec0231d9e9238f2577eeb76ca8d181"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/170e416034ec0231d9e9238f2577eeb76ca8d181/src/include/optimizer/paths.h#L29", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "0a9804f99187ac049c367452e8f0e3a8bad2924a8ba64b20d3957feda7534ccb"}, {"url": "https://github.com/postgres/postgres/blob/170e416034ec0231d9e9238f2577eeb76ca8d181/src/backend/optimizer/path/allpaths.c#L66", "path": "src/backend/optimizer/path/allpaths.c", "label": "Core definition", "sha256": "112b1ef97e3035f335e41f571e5c274144c0abee337a788e265b48ba1ee8a81a"}, {"url": "https://github.com/postgres/postgres/blob/170e416034ec0231d9e9238f2577eeb76ca8d181/src/backend/optimizer/path/allpaths.c#L489", "path": "src/backend/optimizer/path/allpaths.c", "label": "Call sites", "sha256": "112b1ef97e3035f335e41f571e5c274144c0abee337a788e265b48ba1ee8a81a"}], "sections": [{"title": "Core source comments", "paragraphs": ["Allow a plugin to editorialize on the set of Paths for this base relation. It could add new paths (such as CustomPaths) by calling add_path(), or add_partial_path() if parallel aware. It could also delete or modify paths added by the core code."]}, {"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/allpaths.c:489"]}, {"code": "\t * Allow a plugin to editorialize on the set of Paths for this base\n\t * relation.  It could add new paths (such as CustomPaths) by calling\n\t * add_path(), or add_partial_path() if parallel aware.  It could also\n\t * delete or modify paths added by the core code.\n\t */\n\tif (set_rel_pathlist_hook)\n\t\t(*set_rel_pathlist_hook) (root, rel, rti, rte);\n\n\t/*\n\t * If this is a baserel, we should normally consider gathering any partial\n\t * paths we may have created for it.  We have to do this after calling the\n\t * set_rel_pathlist_hook, else it cannot add partial paths to be included\n\t * here.\n\t *\n\t * However, if this is an inheritance child, skip it.  Otherwise, we could", "title": "Core call context: src/backend/optimizer/path/allpaths.c:483\u2013497", "paragraphs": []}], "signature": "typedef void (*set_rel_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte);\nextern PGDLLIMPORT set_rel_pathlist_hook_type set_rel_pathlist_hook;", "description": ["Hook for plugins to get control in set_rel_pathlist()"]}, "12": {"facts": [{"label": "Interface type", "value": "set_rel_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/12/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "REL_12_STABLE", "label": "12", "major": "12", "channel": "historical", "revision": "3f302f0ed06f69c5ebd33d4df95895323a3cbef6"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/3f302f0ed06f69c5ebd33d4df95895323a3cbef6/src/include/optimizer/paths.h#L29", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "5cd4566bfd92117fc9528f43d1a41e923ea751b3f6a435bfefbacee28f2180ac"}, {"url": "https://github.com/postgres/postgres/blob/3f302f0ed06f69c5ebd33d4df95895323a3cbef6/src/backend/optimizer/path/allpaths.c#L68", "path": "src/backend/optimizer/path/allpaths.c", "label": "Core definition", "sha256": "a6ee998b1e9a4c0b834d46dbc404d603e1d3d2d1127f430da1390e47eddae9a8"}, {"url": "https://github.com/postgres/postgres/blob/3f302f0ed06f69c5ebd33d4df95895323a3cbef6/src/backend/optimizer/path/allpaths.c#L540", "path": "src/backend/optimizer/path/allpaths.c", "label": "Call sites", "sha256": "a6ee998b1e9a4c0b834d46dbc404d603e1d3d2d1127f430da1390e47eddae9a8"}], "sections": [{"title": "Core source comments", "paragraphs": ["Allow a plugin to editorialize on the set of Paths for this base relation. It could add new paths (such as CustomPaths) by calling add_path(), or add_partial_path() if parallel aware. It could also delete or modify paths added by the core code."]}, {"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/allpaths.c:540"]}, {"code": "\t * Allow a plugin to editorialize on the set of Paths for this base\n\t * relation.  It could add new paths (such as CustomPaths) by calling\n\t * add_path(), or add_partial_path() if parallel aware.  It could also\n\t * delete or modify paths added by the core code.\n\t */\n\tif (set_rel_pathlist_hook)\n\t\t(*set_rel_pathlist_hook) (root, rel, rti, rte);\n\n\t/*\n\t * If this is a baserel, we should normally consider gathering any partial\n\t * paths we may have created for it.  We have to do this after calling the\n\t * set_rel_pathlist_hook, else it cannot add partial paths to be included\n\t * here.\n\t *\n\t * However, if this is an inheritance child, skip it.  Otherwise, we could", "title": "Core call context: src/backend/optimizer/path/allpaths.c:534\u2013548", "paragraphs": []}], "signature": "typedef void (*set_rel_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte);\nextern PGDLLIMPORT set_rel_pathlist_hook_type set_rel_pathlist_hook;", "description": ["Hook for plugins to get control in set_rel_pathlist()"]}, "13": {"facts": [{"label": "Interface type", "value": "set_rel_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/13/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "REL_13_STABLE", "label": "13", "major": "13", "channel": "historical", "revision": "05f6c9ec2c475fae8fdd56ae40bd01afcf70d1f2"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/05f6c9ec2c475fae8fdd56ae40bd01afcf70d1f2/src/include/optimizer/paths.h#L29", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "9cf3e1a9a86500ab3330f6e6ccefc8d0368fe2ee15b521ed11c613f6f69ee487"}, {"url": "https://github.com/postgres/postgres/blob/05f6c9ec2c475fae8fdd56ae40bd01afcf70d1f2/src/backend/optimizer/path/allpaths.c#L68", "path": "src/backend/optimizer/path/allpaths.c", "label": "Core definition", "sha256": "d20c1bdd4a672afda6f6a3b555d2d823f3308435aac41516e0d63e413cdeb5f0"}, {"url": "https://github.com/postgres/postgres/blob/05f6c9ec2c475fae8fdd56ae40bd01afcf70d1f2/src/backend/optimizer/path/allpaths.c#L540", "path": "src/backend/optimizer/path/allpaths.c", "label": "Call sites", "sha256": "d20c1bdd4a672afda6f6a3b555d2d823f3308435aac41516e0d63e413cdeb5f0"}], "sections": [{"title": "Core source comments", "paragraphs": ["Allow a plugin to editorialize on the set of Paths for this base relation. It could add new paths (such as CustomPaths) by calling add_path(), or add_partial_path() if parallel aware. It could also delete or modify paths added by the core code."]}, {"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/allpaths.c:540"]}, {"code": "\t * Allow a plugin to editorialize on the set of Paths for this base\n\t * relation.  It could add new paths (such as CustomPaths) by calling\n\t * add_path(), or add_partial_path() if parallel aware.  It could also\n\t * delete or modify paths added by the core code.\n\t */\n\tif (set_rel_pathlist_hook)\n\t\t(*set_rel_pathlist_hook) (root, rel, rti, rte);\n\n\t/*\n\t * If this is a baserel, we should normally consider gathering any partial\n\t * paths we may have created for it.  We have to do this after calling the\n\t * set_rel_pathlist_hook, else it cannot add partial paths to be included\n\t * here.\n\t *\n\t * However, if this is an inheritance child, skip it.  Otherwise, we could", "title": "Core call context: src/backend/optimizer/path/allpaths.c:534\u2013548", "paragraphs": []}], "signature": "typedef void (*set_rel_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte);\nextern PGDLLIMPORT set_rel_pathlist_hook_type set_rel_pathlist_hook;", "description": ["Hook for plugins to get control in set_rel_pathlist()"]}, "14": {"facts": [{"label": "Interface type", "value": "set_rel_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/14/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "REL_14_STABLE", "label": "14", "major": "14", "channel": "stable", "revision": "fba35c7c28a567839faba867db0808564c0a66db"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/fba35c7c28a567839faba867db0808564c0a66db/src/include/optimizer/paths.h#L29", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "6f4a259bd1b518c6378a75766b2ca2285072894cf7645d102e98f15613dfb1c7"}, {"url": "https://github.com/postgres/postgres/blob/fba35c7c28a567839faba867db0808564c0a66db/src/backend/optimizer/path/allpaths.c#L68", "path": "src/backend/optimizer/path/allpaths.c", "label": "Core definition", "sha256": "68b3eb17f9e400ebb4b7da3df2a133361fc5d1b3e6459805585a241c14c80a45"}, {"url": "https://github.com/postgres/postgres/blob/fba35c7c28a567839faba867db0808564c0a66db/src/backend/optimizer/path/allpaths.c#L541", "path": "src/backend/optimizer/path/allpaths.c", "label": "Call sites", "sha256": "68b3eb17f9e400ebb4b7da3df2a133361fc5d1b3e6459805585a241c14c80a45"}], "sections": [{"title": "Core source comments", "paragraphs": ["Allow a plugin to editorialize on the set of Paths for this base relation. It could add new paths (such as CustomPaths) by calling add_path(), or add_partial_path() if parallel aware. It could also delete or modify paths added by the core code."]}, {"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/allpaths.c:541"]}, {"code": "\t * Allow a plugin to editorialize on the set of Paths for this base\n\t * relation.  It could add new paths (such as CustomPaths) by calling\n\t * add_path(), or add_partial_path() if parallel aware.  It could also\n\t * delete or modify paths added by the core code.\n\t */\n\tif (set_rel_pathlist_hook)\n\t\t(*set_rel_pathlist_hook) (root, rel, rti, rte);\n\n\t/*\n\t * If this is a baserel, we should normally consider gathering any partial\n\t * paths we may have created for it.  We have to do this after calling the\n\t * set_rel_pathlist_hook, else it cannot add partial paths to be included\n\t * here.\n\t *\n\t * However, if this is an inheritance child, skip it.  Otherwise, we could", "title": "Core call context: src/backend/optimizer/path/allpaths.c:535\u2013549", "paragraphs": []}], "signature": "typedef void (*set_rel_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte);\nextern PGDLLIMPORT set_rel_pathlist_hook_type set_rel_pathlist_hook;", "description": ["Hook for plugins to get control in set_rel_pathlist()"]}, "15": {"facts": [{"label": "Interface type", "value": "set_rel_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/15/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "REL_15_STABLE", "label": "15", "major": "15", "channel": "stable", "revision": "0351991b8e7c7b64382e2f30ce581a8f276590a6"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/0351991b8e7c7b64382e2f30ce581a8f276590a6/src/include/optimizer/paths.h#L29", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "26db4ac12a1de0b35a8f64334e4879725ead4060072fe6b105ee8f824c6a6916"}, {"url": "https://github.com/postgres/postgres/blob/0351991b8e7c7b64382e2f30ce581a8f276590a6/src/backend/optimizer/path/allpaths.c#L87", "path": "src/backend/optimizer/path/allpaths.c", "label": "Core definition", "sha256": "3397ddbbffb459d63d802dd89ef4e30d830a6b0ac910dc50ee996923dd292a5f"}, {"url": "https://github.com/postgres/postgres/blob/0351991b8e7c7b64382e2f30ce581a8f276590a6/src/backend/optimizer/path/allpaths.c#L561", "path": "src/backend/optimizer/path/allpaths.c", "label": "Call sites", "sha256": "3397ddbbffb459d63d802dd89ef4e30d830a6b0ac910dc50ee996923dd292a5f"}], "sections": [{"title": "Core source comments", "paragraphs": ["Allow a plugin to editorialize on the set of Paths for this base relation. It could add new paths (such as CustomPaths) by calling add_path(), or add_partial_path() if parallel aware. It could also delete or modify paths added by the core code."]}, {"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/allpaths.c:561"]}, {"code": "\t * Allow a plugin to editorialize on the set of Paths for this base\n\t * relation.  It could add new paths (such as CustomPaths) by calling\n\t * add_path(), or add_partial_path() if parallel aware.  It could also\n\t * delete or modify paths added by the core code.\n\t */\n\tif (set_rel_pathlist_hook)\n\t\t(*set_rel_pathlist_hook) (root, rel, rti, rte);\n\n\t/*\n\t * If this is a baserel, we should normally consider gathering any partial\n\t * paths we may have created for it.  We have to do this after calling the\n\t * set_rel_pathlist_hook, else it cannot add partial paths to be included\n\t * here.\n\t *\n\t * However, if this is an inheritance child, skip it.  Otherwise, we could", "title": "Core call context: src/backend/optimizer/path/allpaths.c:555\u2013569", "paragraphs": []}], "signature": "typedef void (*set_rel_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte);\nextern PGDLLIMPORT set_rel_pathlist_hook_type set_rel_pathlist_hook;", "description": ["Hook for plugins to get control in set_rel_pathlist()"]}, "16": {"facts": [{"label": "Interface type", "value": "set_rel_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/16/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "REL_16_STABLE", "label": "16", "major": "16", "channel": "stable", "revision": "dcc37b7099a9f3cf2c75167d8dc92e75f96bc1fa"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/dcc37b7099a9f3cf2c75167d8dc92e75f96bc1fa/src/include/optimizer/paths.h#L29", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "4c5cfcfe85de1611e544d8b832fe9b4fcf0f059a0e8d7ffb4f0f5b7381fd214e"}, {"url": "https://github.com/postgres/postgres/blob/dcc37b7099a9f3cf2c75167d8dc92e75f96bc1fa/src/backend/optimizer/path/allpaths.c#L88", "path": "src/backend/optimizer/path/allpaths.c", "label": "Core definition", "sha256": "c80d07eee3c76057b7aab1c27be42c44e26c0a3231e6505d071e032ceefb9228"}, {"url": "https://github.com/postgres/postgres/blob/dcc37b7099a9f3cf2c75167d8dc92e75f96bc1fa/src/backend/optimizer/path/allpaths.c#L542", "path": "src/backend/optimizer/path/allpaths.c", "label": "Call sites", "sha256": "c80d07eee3c76057b7aab1c27be42c44e26c0a3231e6505d071e032ceefb9228"}], "sections": [{"title": "Core source comments", "paragraphs": ["Allow a plugin to editorialize on the set of Paths for this base relation. It could add new paths (such as CustomPaths) by calling add_path(), or add_partial_path() if parallel aware. It could also delete or modify paths added by the core code."]}, {"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/allpaths.c:542"]}, {"code": "\t * Allow a plugin to editorialize on the set of Paths for this base\n\t * relation.  It could add new paths (such as CustomPaths) by calling\n\t * add_path(), or add_partial_path() if parallel aware.  It could also\n\t * delete or modify paths added by the core code.\n\t */\n\tif (set_rel_pathlist_hook)\n\t\t(*set_rel_pathlist_hook) (root, rel, rti, rte);\n\n\t/*\n\t * If this is a baserel, we should normally consider gathering any partial\n\t * paths we may have created for it.  We have to do this after calling the\n\t * set_rel_pathlist_hook, else it cannot add partial paths to be included\n\t * here.\n\t *\n\t * However, if this is an inheritance child, skip it.  Otherwise, we could", "title": "Core call context: src/backend/optimizer/path/allpaths.c:536\u2013550", "paragraphs": []}], "signature": "typedef void (*set_rel_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte);\nextern PGDLLIMPORT set_rel_pathlist_hook_type set_rel_pathlist_hook;", "description": ["Hook for plugins to get control in set_rel_pathlist()"]}, "17": {"facts": [{"label": "Interface type", "value": "set_rel_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/17/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "REL_17_STABLE", "label": "17", "major": "17", "channel": "stable", "revision": "163288afd32a448244c8df75b3c33181aadd7f20"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/163288afd32a448244c8df75b3c33181aadd7f20/src/include/optimizer/paths.h#L30", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "95ee796a45866c5501ecaef58344017d69d2453da5dde588195c991934d35877"}, {"url": "https://github.com/postgres/postgres/blob/163288afd32a448244c8df75b3c33181aadd7f20/src/backend/optimizer/path/allpaths.c#L85", "path": "src/backend/optimizer/path/allpaths.c", "label": "Core definition", "sha256": "f3c06a7b804de19360b78d49dd3c31173d120a1186e248422e6dbcbe3a6905f3"}, {"url": "https://github.com/postgres/postgres/blob/163288afd32a448244c8df75b3c33181aadd7f20/src/backend/optimizer/path/allpaths.c#L539", "path": "src/backend/optimizer/path/allpaths.c", "label": "Call sites", "sha256": "f3c06a7b804de19360b78d49dd3c31173d120a1186e248422e6dbcbe3a6905f3"}], "sections": [{"title": "Core source comments", "paragraphs": ["Allow a plugin to editorialize on the set of Paths for this base relation. It could add new paths (such as CustomPaths) by calling add_path(), or add_partial_path() if parallel aware. It could also delete or modify paths added by the core code."]}, {"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/allpaths.c:539"]}, {"code": "\t * Allow a plugin to editorialize on the set of Paths for this base\n\t * relation.  It could add new paths (such as CustomPaths) by calling\n\t * add_path(), or add_partial_path() if parallel aware.  It could also\n\t * delete or modify paths added by the core code.\n\t */\n\tif (set_rel_pathlist_hook)\n\t\t(*set_rel_pathlist_hook) (root, rel, rti, rte);\n\n\t/*\n\t * If this is a baserel, we should normally consider gathering any partial\n\t * paths we may have created for it.  We have to do this after calling the\n\t * set_rel_pathlist_hook, else it cannot add partial paths to be included\n\t * here.\n\t *\n\t * However, if this is an inheritance child, skip it.  Otherwise, we could", "title": "Core call context: src/backend/optimizer/path/allpaths.c:533\u2013547", "paragraphs": []}], "signature": "typedef void (*set_rel_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte);\nextern PGDLLIMPORT set_rel_pathlist_hook_type set_rel_pathlist_hook;", "description": ["Hook for plugins to get control in set_rel_pathlist()"]}, "18": {"facts": [{"label": "Interface type", "value": "set_rel_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/18/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "REL_18_STABLE", "label": "18", "major": "18", "channel": "stable", "revision": "753057e340da8f22e57c9a409ea7a235fd6a46bd"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/include/optimizer/paths.h#L30", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "bf497b2e5501e7c86250147c9cc779785ccec7bb2a806d3c71571313e890208f"}, {"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/optimizer/path/allpaths.c#L85", "path": "src/backend/optimizer/path/allpaths.c", "label": "Core definition", "sha256": "285b61d146f1e7324a43d7d408ca8d6f10ad3de7eaba01c9f1d618417c21392d"}, {"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/optimizer/path/allpaths.c#L543", "path": "src/backend/optimizer/path/allpaths.c", "label": "Call sites", "sha256": "285b61d146f1e7324a43d7d408ca8d6f10ad3de7eaba01c9f1d618417c21392d"}], "sections": [{"title": "Core source comments", "paragraphs": ["Allow a plugin to editorialize on the set of Paths for this base relation. It could add new paths (such as CustomPaths) by calling add_path(), or add_partial_path() if parallel aware. It could also delete or modify paths added by the core code."]}, {"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/allpaths.c:543"]}, {"code": "\t * Allow a plugin to editorialize on the set of Paths for this base\n\t * relation.  It could add new paths (such as CustomPaths) by calling\n\t * add_path(), or add_partial_path() if parallel aware.  It could also\n\t * delete or modify paths added by the core code.\n\t */\n\tif (set_rel_pathlist_hook)\n\t\t(*set_rel_pathlist_hook) (root, rel, rti, rte);\n\n\t/*\n\t * If this is a baserel, we should normally consider gathering any partial\n\t * paths we may have created for it.  We have to do this after calling the\n\t * set_rel_pathlist_hook, else it cannot add partial paths to be included\n\t * here.\n\t *\n\t * However, if this is an inheritance child, skip it.  Otherwise, we could", "title": "Core call context: src/backend/optimizer/path/allpaths.c:537\u2013551", "paragraphs": []}], "signature": "typedef void (*set_rel_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte);\nextern PGDLLIMPORT set_rel_pathlist_hook_type set_rel_pathlist_hook;", "description": ["Hook for plugins to get control in set_rel_pathlist()"]}, "19": {"facts": [{"label": "Interface type", "value": "set_rel_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/19/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "REL_19_BETA4", "label": "19 Beta 4", "major": "19", "channel": "preview", "revision": "b73d13c32c834a2c8e1c60cb92f79530376cedf1"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/b73d13c32c834a2c8e1c60cb92f79530376cedf1/src/include/optimizer/paths.h#L39", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "f1ad3b9072e9a7307836c33477dbb472f36bb3a2c135fa50cd1622d3750310cb"}, {"url": "https://github.com/postgres/postgres/blob/b73d13c32c834a2c8e1c60cb92f79530376cedf1/src/backend/optimizer/path/allpaths.c#L89", "path": "src/backend/optimizer/path/allpaths.c", "label": "Core definition", "sha256": "f1a5425d94371d2395bcc76be126cc75d65a8d96f1f3d87e851f540672e56f62"}, {"url": "https://github.com/postgres/postgres/blob/b73d13c32c834a2c8e1c60cb92f79530376cedf1/src/backend/optimizer/path/allpaths.c#L590", "path": "src/backend/optimizer/path/allpaths.c", "label": "Call sites", "sha256": "f1a5425d94371d2395bcc76be126cc75d65a8d96f1f3d87e851f540672e56f62"}], "sections": [{"title": "Core source comments", "paragraphs": ["Allow a plugin to editorialize on the set of Paths for this base relation. It could add new paths (such as CustomPaths) by calling add_path(), or add_partial_path() if parallel aware. It could also delete or modify paths added by the core code."]}, {"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/allpaths.c:590"]}, {"code": "\t * Allow a plugin to editorialize on the set of Paths for this base\n\t * relation.  It could add new paths (such as CustomPaths) by calling\n\t * add_path(), or add_partial_path() if parallel aware.  It could also\n\t * delete or modify paths added by the core code.\n\t */\n\tif (set_rel_pathlist_hook)\n\t\t(*set_rel_pathlist_hook) (root, rel, rti, rte);\n\n\t/*\n\t * If this is a baserel, we should normally consider gathering any partial\n\t * paths we may have created for it.  We have to do this after calling the\n\t * set_rel_pathlist_hook, else it cannot add partial paths to be included\n\t * here.\n\t *\n\t * However, if this is an inheritance child, skip it.  Otherwise, we could", "title": "Core call context: src/backend/optimizer/path/allpaths.c:584\u2013598", "paragraphs": []}], "signature": "typedef void (*set_rel_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte);\nextern PGDLLIMPORT set_rel_pathlist_hook_type set_rel_pathlist_hook;", "description": ["Hook for plugins to get control in set_rel_pathlist()"]}, "20": {"facts": [{"label": "Interface type", "value": "set_rel_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/devel/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "master", "label": "20 devel", "major": "20", "channel": "devel", "revision": "2c10c2ce4d7bcd57543a49ab402af02a39724e0a"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/include/optimizer/paths.h#L39", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "7d4e6d888e06597a145f6e53f235a90dc70f13db5bab820339f63023003b79e3"}, {"url": "https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/backend/optimizer/path/allpaths.c#L89", "path": "src/backend/optimizer/path/allpaths.c", "label": "Core definition", "sha256": "b78b8e5a80c3a6f9886a5a6f3edb1dc89c366f8fcc3c890327e4b979bc7b08cc"}, {"url": "https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/backend/optimizer/path/allpaths.c#L590", "path": "src/backend/optimizer/path/allpaths.c", "label": "Call sites", "sha256": "b78b8e5a80c3a6f9886a5a6f3edb1dc89c366f8fcc3c890327e4b979bc7b08cc"}], "sections": [{"title": "Core source comments", "paragraphs": ["Allow a plugin to editorialize on the set of Paths for this base relation. It could add new paths (such as CustomPaths) by calling add_path(), or add_partial_path() if parallel aware. It could also delete or modify paths added by the core code."]}, {"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/allpaths.c:590"]}, {"code": "\t * Allow a plugin to editorialize on the set of Paths for this base\n\t * relation.  It could add new paths (such as CustomPaths) by calling\n\t * add_path(), or add_partial_path() if parallel aware.  It could also\n\t * delete or modify paths added by the core code.\n\t */\n\tif (set_rel_pathlist_hook)\n\t\t(*set_rel_pathlist_hook) (root, rel, rti, rte);\n\n\t/*\n\t * If this is a baserel, we should normally consider gathering any partial\n\t * paths we may have created for it.  We have to do this after calling the\n\t * set_rel_pathlist_hook, else it cannot add partial paths to be included\n\t * here.\n\t *\n\t * However, if this is an inheritance child, skip it.  Otherwise, we could", "title": "Core call context: src/backend/optimizer/path/allpaths.c:584\u2013598", "paragraphs": []}], "signature": "typedef void (*set_rel_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte);\nextern PGDLLIMPORT set_rel_pathlist_hook_type set_rel_pathlist_hook;", "description": ["Hook for plugins to get control in set_rel_pathlist()"]}}, "content_hash": "f45e098d7bc0ff3b86847d5083bee675b8a9e0dbe644871ba054f56c18752ef3", "imported_at": "2026-09-27T09:57:58.888"}, "snapshot": {"facts": [{"label": "Interface type", "value": "set_rel_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/18/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "REL_18_STABLE", "label": "18", "major": "18", "channel": "stable", "revision": "753057e340da8f22e57c9a409ea7a235fd6a46bd"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/include/optimizer/paths.h#L30", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "bf497b2e5501e7c86250147c9cc779785ccec7bb2a806d3c71571313e890208f"}, {"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/optimizer/path/allpaths.c#L85", "path": "src/backend/optimizer/path/allpaths.c", "label": "Core definition", "sha256": "285b61d146f1e7324a43d7d408ca8d6f10ad3de7eaba01c9f1d618417c21392d"}, {"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/optimizer/path/allpaths.c#L543", "path": "src/backend/optimizer/path/allpaths.c", "label": "Call sites", "sha256": "285b61d146f1e7324a43d7d408ca8d6f10ad3de7eaba01c9f1d618417c21392d"}], "sections": [{"title": "Core source comments", "paragraphs": ["Allow a plugin to editorialize on the set of Paths for this base relation. It could add new paths (such as CustomPaths) by calling add_path(), or add_partial_path() if parallel aware. It could also delete or modify paths added by the core code."]}, {"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/allpaths.c:543"]}, {"code": "\t * Allow a plugin to editorialize on the set of Paths for this base\n\t * relation.  It could add new paths (such as CustomPaths) by calling\n\t * add_path(), or add_partial_path() if parallel aware.  It could also\n\t * delete or modify paths added by the core code.\n\t */\n\tif (set_rel_pathlist_hook)\n\t\t(*set_rel_pathlist_hook) (root, rel, rti, rte);\n\n\t/*\n\t * If this is a baserel, we should normally consider gathering any partial\n\t * paths we may have created for it.  We have to do this after calling the\n\t * set_rel_pathlist_hook, else it cannot add partial paths to be included\n\t * here.\n\t *\n\t * However, if this is an inheritance child, skip it.  Otherwise, we could", "title": "Core call context: src/backend/optimizer/path/allpaths.c:537\u2013551", "paragraphs": []}], "signature": "typedef void (*set_rel_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte);\nextern PGDLLIMPORT set_rel_pathlist_hook_type set_rel_pathlist_hook;", "description": ["Hook for plugins to get control in set_rel_pathlist()"]}, "comparison": {"left": "17", "right": "18", "status": "unchanged", "diff": ""}}