{"kind": "hook", "major": "18", "item": {"slug": "explain_validate_options_hook", "name": "explain_validate_options_hook", "name_zh": "explain_validate_options_hook", "category": "EXPLAIN", "summary": "Hook to perform additional EXPLAIN options validation", "aliases": [], "versions": {"18": {"facts": [{"label": "Interface type", "value": "explain_validate_options_hook_type"}, {"label": "Header", "value": "src/include/commands/explain_state.h"}, {"label": "Subsystem", "value": "EXPLAIN"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/sql/explain/?v=18", "label": "EXPLAIN"}], "release": {"ref": "REL_18_STABLE", "label": "18", "major": "18", "channel": "stable", "revision": "753057e340da8f22e57c9a409ea7a235fd6a46bd"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/include/commands/explain_state.h#L82", "path": "src/include/commands/explain_state.h", "label": "Interface declaration", "sha256": "88894e050e956d07561de6cf6d57bb0d5de915cc2fb35565e3e7e68c4c59973d"}, {"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/commands/explain_state.c#L41", "path": "src/backend/commands/explain_state.c", "label": "Core definition", "sha256": "408c1ec6cd8757c31914fb9015e8f01d3b5a9f8f59173fda7b65e76147447bb1"}, {"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/commands/explain_state.c#L206", "path": "src/backend/commands/explain_state.c", "label": "Call sites", "sha256": "408c1ec6cd8757c31914fb9015e8f01d3b5a9f8f59173fda7b65e76147447bb1"}], "sections": [{"title": "Core source comments", "paragraphs": ["plugin specific option validation"]}, {"title": "Call sites", "paragraphs": ["src/backend/commands/explain_state.c:206"]}, {"code": "\n\t/* if the summary was not set explicitly, set default value */\n\tes->summary = (summary_set) ? es->summary : es->analyze;\n\n\t/* plugin specific option validation */\n\tif (explain_validate_options_hook)\n\t\t(*explain_validate_options_hook) (es, options, pstate);\n}\n\n/*\n * Map the name of an EXPLAIN extension to an integer ID.\n *\n * Within the lifetime of a particular backend, the same name will be mapped\n * to the same ID every time. IDs are not stable across backends. Use the ID\n * that you get from this function to call GetExplainExtensionState and", "title": "Core call context: src/backend/commands/explain_state.c:200\u2013214", "paragraphs": []}], "signature": "typedef void (*explain_validate_options_hook_type) (struct ExplainState *es, List *options, ParseState *pstate);\nextern PGDLLIMPORT explain_validate_options_hook_type explain_validate_options_hook;", "description": ["Hook to perform additional EXPLAIN options validation"]}, "19": {"facts": [{"label": "Interface type", "value": "explain_validate_options_hook_type"}, {"label": "Header", "value": "src/include/commands/explain_state.h"}, {"label": "Subsystem", "value": "EXPLAIN"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/sql/explain/?v=19", "label": "EXPLAIN"}], "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/commands/explain_state.h#L87", "path": "src/include/commands/explain_state.h", "label": "Interface declaration", "sha256": "f79de29b15d6b80799404d801781f93f09afe5b00a930a8ea5e4144f14820d39"}, {"url": "https://github.com/postgres/postgres/blob/b73d13c32c834a2c8e1c60cb92f79530376cedf1/src/backend/commands/explain_state.c#L43", "path": "src/backend/commands/explain_state.c", "label": "Core definition", "sha256": "eb730914803e0db82773e9d4435a87b794fb9758c842b43daebc38c3f6712061"}, {"url": "https://github.com/postgres/postgres/blob/b73d13c32c834a2c8e1c60cb92f79530376cedf1/src/backend/commands/explain_state.c#L217", "path": "src/backend/commands/explain_state.c", "label": "Call sites", "sha256": "eb730914803e0db82773e9d4435a87b794fb9758c842b43daebc38c3f6712061"}], "sections": [{"title": "Core source comments", "paragraphs": ["plugin specific option validation"]}, {"title": "Call sites", "paragraphs": ["src/backend/commands/explain_state.c:217"]}, {"code": "\n\t/* if the summary was not set explicitly, set default value */\n\tes->summary = (summary_set) ? es->summary : es->analyze;\n\n\t/* plugin specific option validation */\n\tif (explain_validate_options_hook)\n\t\t(*explain_validate_options_hook) (es, options, pstate);\n}\n\n/*\n * Map the name of an EXPLAIN extension to an integer ID.\n *\n * Within the lifetime of a particular backend, the same name will be mapped\n * to the same ID every time. IDs are not stable across backends. Use the ID\n * that you get from this function to call GetExplainExtensionState and", "title": "Core call context: src/backend/commands/explain_state.c:211\u2013225", "paragraphs": []}], "signature": "typedef void (*explain_validate_options_hook_type) (ExplainState *es, List *options, ParseState *pstate);\nextern PGDLLIMPORT explain_validate_options_hook_type explain_validate_options_hook;", "description": ["Hook to perform additional EXPLAIN options validation"]}, "20": {"facts": [{"label": "Interface type", "value": "explain_validate_options_hook_type"}, {"label": "Header", "value": "src/include/commands/explain_state.h"}, {"label": "Subsystem", "value": "EXPLAIN"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/sql/explain/?v=20", "label": "EXPLAIN"}], "release": {"ref": "master", "label": "20 devel", "major": "20", "channel": "devel", "revision": "2c10c2ce4d7bcd57543a49ab402af02a39724e0a"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/include/commands/explain_state.h#L87", "path": "src/include/commands/explain_state.h", "label": "Interface declaration", "sha256": "f79de29b15d6b80799404d801781f93f09afe5b00a930a8ea5e4144f14820d39"}, {"url": "https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/backend/commands/explain_state.c#L43", "path": "src/backend/commands/explain_state.c", "label": "Core definition", "sha256": "7fec496c67a1105d208e59988fd227f4258ee76635f3080e8f0e3fe082b269e0"}, {"url": "https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/backend/commands/explain_state.c#L217", "path": "src/backend/commands/explain_state.c", "label": "Call sites", "sha256": "7fec496c67a1105d208e59988fd227f4258ee76635f3080e8f0e3fe082b269e0"}], "sections": [{"title": "Core source comments", "paragraphs": ["plugin specific option validation"]}, {"title": "Call sites", "paragraphs": ["src/backend/commands/explain_state.c:217"]}, {"code": "\n\t/* if the summary was not set explicitly, set default value */\n\tes->summary = (summary_set) ? es->summary : es->analyze;\n\n\t/* plugin specific option validation */\n\tif (explain_validate_options_hook)\n\t\t(*explain_validate_options_hook) (es, options, pstate);\n}\n\n/*\n * Map the name of an EXPLAIN extension to an integer ID.\n *\n * Within the lifetime of a particular backend, the same name will be mapped\n * to the same ID every time. IDs are not stable across backends. Use the ID\n * that you get from this function to call GetExplainExtensionState and", "title": "Core call context: src/backend/commands/explain_state.c:211\u2013225", "paragraphs": []}], "signature": "typedef void (*explain_validate_options_hook_type) (ExplainState *es, List *options, ParseState *pstate);\nextern PGDLLIMPORT explain_validate_options_hook_type explain_validate_options_hook;", "description": ["Hook to perform additional EXPLAIN options validation"]}}, "content_hash": "60ad7fe6896ebed7275c2bca495e65ba1f8e0f20d225a66e79e5eab2f776e8c5", "imported_at": "2026-09-27T09:57:58.837"}, "snapshot": {"facts": [{"label": "Interface type", "value": "explain_validate_options_hook_type"}, {"label": "Header", "value": "src/include/commands/explain_state.h"}, {"label": "Subsystem", "value": "EXPLAIN"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/sql/explain/?v=18", "label": "EXPLAIN"}], "release": {"ref": "REL_18_STABLE", "label": "18", "major": "18", "channel": "stable", "revision": "753057e340da8f22e57c9a409ea7a235fd6a46bd"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/include/commands/explain_state.h#L82", "path": "src/include/commands/explain_state.h", "label": "Interface declaration", "sha256": "88894e050e956d07561de6cf6d57bb0d5de915cc2fb35565e3e7e68c4c59973d"}, {"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/commands/explain_state.c#L41", "path": "src/backend/commands/explain_state.c", "label": "Core definition", "sha256": "408c1ec6cd8757c31914fb9015e8f01d3b5a9f8f59173fda7b65e76147447bb1"}, {"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/commands/explain_state.c#L206", "path": "src/backend/commands/explain_state.c", "label": "Call sites", "sha256": "408c1ec6cd8757c31914fb9015e8f01d3b5a9f8f59173fda7b65e76147447bb1"}], "sections": [{"title": "Core source comments", "paragraphs": ["plugin specific option validation"]}, {"title": "Call sites", "paragraphs": ["src/backend/commands/explain_state.c:206"]}, {"code": "\n\t/* if the summary was not set explicitly, set default value */\n\tes->summary = (summary_set) ? es->summary : es->analyze;\n\n\t/* plugin specific option validation */\n\tif (explain_validate_options_hook)\n\t\t(*explain_validate_options_hook) (es, options, pstate);\n}\n\n/*\n * Map the name of an EXPLAIN extension to an integer ID.\n *\n * Within the lifetime of a particular backend, the same name will be mapped\n * to the same ID every time. IDs are not stable across backends. Use the ID\n * that you get from this function to call GetExplainExtensionState and", "title": "Core call context: src/backend/commands/explain_state.c:200\u2013214", "paragraphs": []}], "signature": "typedef void (*explain_validate_options_hook_type) (struct ExplainState *es, List *options, ParseState *pstate);\nextern PGDLLIMPORT explain_validate_options_hook_type explain_validate_options_hook;", "description": ["Hook to perform additional EXPLAIN options validation"]}, "comparison": {"left": "18", "right": "19", "status": "changed", "diff": "--- PostgreSQL 18\n+++ PostgreSQL 19\n@@ -17,6 +17,6 @@\n       \"value\": \"NULL (no hook installed)\"\n     }\n   ],\n-  \"signature\": \"typedef void (*explain_validate_options_hook_type) (struct ExplainState *es, List *options, ParseState *pstate);\\nextern PGDLLIMPORT explain_validate_options_hook_type explain_validate_options_hook;\",\n+  \"signature\": \"typedef void (*explain_validate_options_hook_type) (ExplainState *es, List *options, ParseState *pstate);\\nextern PGDLLIMPORT explain_validate_options_hook_type explain_validate_options_hook;\",\n   \"tables\": null\n }"}}