{"Entry":{"collection":"hook","key":"planner_shutdown_hook","name":"planner_shutdown_hook","aliases":[],"metadata":{"aliases":[],"category":"Query planning","content_hash":"52e88914e0931c6e250c3ebf6ba0fce8b0690ceb3a794dd6b55675780241959a","imported_at":"2026-09-27T17:57:58.884881+08:00","name":"planner_shutdown_hook","name_zh":"planner_shutdown_hook","slug":"planner_shutdown_hook","summary":"Hook for plugins to get control before PlannerGlobal is discarded"}},"Definition":{"Collection":"hook","Key":"planner_shutdown_hook","SourceDatabase":"center","Version":"20","SourceTable":"hook","SourceKey":"planner_shutdown_hook","SourceRevision":"2c10c2ce4d7bcd57543a49ab402af02a39724e0a","Facts":{"description":["Hook for plugins to get control before PlannerGlobal is discarded"],"facts":[{"label":"Interface type","value":"planner_shutdown_hook_type"},{"label":"Header","value":"src/include/optimizer/planner.h"},{"label":"Subsystem","value":"Query planning"},{"label":"Initial value","value":"NULL (no hook installed)"}],"related":[{"label":"The Planner/Optimizer","url":"/docs/devel/planner-optimizer.html"}],"release":{"channel":"devel","label":"20 devel","major":"20","ref":"master","revision":"2c10c2ce4d7bcd57543a49ab402af02a39724e0a"},"sections":[{"paragraphs":["Allow plugins to take control before we discard \"glob\""],"title":"Core source comments"},{"paragraphs":["src/backend/optimizer/plan/planner.c:735"],"title":"Call sites"},{"code":"\t\tif (jit_tuple_deforming)\n\t\t\tresult-\u003ejitFlags |= PGJIT_DEFORM;\n\t}\n\n\t/* Allow plugins to take control before we discard \"glob\" */\n\tif (planner_shutdown_hook)\n\t\t(*planner_shutdown_hook) (glob, parse, query_string, result);\n\n\tif (glob-\u003epartition_directory != NULL)\n\t\tDestroyPartitionDirectory(glob-\u003epartition_directory);\n\n\treturn result;\n}\n\n","paragraphs":[],"title":"Core call context: src/backend/optimizer/plan/planner.c:729–743"}],"signature":"typedef void (*planner_shutdown_hook_type) (PlannerGlobal *glob, Query *parse, const char *query_string, PlannedStmt *pstmt);\nextern PGDLLIMPORT planner_shutdown_hook_type planner_shutdown_hook;","sources":[{"label":"Interface declaration","path":"src/include/optimizer/planner.h","sha256":"4d38d7e4dd9956ef015711e8bf3262ea52631558a0eea290d4fa14ac517c5407","url":"https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/include/optimizer/planner.h#L44"},{"label":"Core definition","path":"src/backend/optimizer/plan/planner.c","sha256":"fbcf53dca02672e0d1757d98942126dd22a4bcadf5a2323710f76d854fe84395","url":"https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/backend/optimizer/plan/planner.c#L80"},{"label":"Call sites","path":"src/backend/optimizer/plan/planner.c","sha256":"fbcf53dca02672e0d1757d98942126dd22a4bcadf5a2323710f76d854fe84395","url":"https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/backend/optimizer/plan/planner.c#L735"}]},"ManualEvidence":{"release":{"channel":"devel","label":"20 devel","major":"20","ref":"master","revision":"2c10c2ce4d7bcd57543a49ab402af02a39724e0a"},"sources":[{"label":"Interface declaration","path":"src/include/optimizer/planner.h","sha256":"4d38d7e4dd9956ef015711e8bf3262ea52631558a0eea290d4fa14ac517c5407","url":"https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/include/optimizer/planner.h#L44"},{"label":"Core definition","path":"src/backend/optimizer/plan/planner.c","sha256":"fbcf53dca02672e0d1757d98942126dd22a4bcadf5a2323710f76d854fe84395","url":"https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/backend/optimizer/plan/planner.c#L80"},{"label":"Call sites","path":"src/backend/optimizer/plan/planner.c","sha256":"fbcf53dca02672e0d1757d98942126dd22a4bcadf5a2323710f76d854fe84395","url":"https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/backend/optimizer/plan/planner.c#L735"}]},"MeasuredEvidence":{}},"Text":{"Collection":"hook","Key":"planner_shutdown_hook","SourceDatabase":"center","Version":"20","Locale":"en","Title":"planner_shutdown_hook","Summary":"Hook for plugins to get control before PlannerGlobal is discarded","BodyHTML":"\u003cp\u003eHook for plugins to get control before PlannerGlobal is discarded\u003c/p\u003e","SourceRevision":"2c10c2ce4d7bcd57543a49ab402af02a39724e0a","ContentHash":"bcb71b9b50cd5ad405f0f2cd015e1d14b8dabe27983aa5885ad63db01481be91","Payload":{"description":["Hook for plugins to get control before PlannerGlobal is discarded"],"related":[{"label":"The Planner/Optimizer","url":"/docs/devel/planner-optimizer.html"}],"sections":[{"paragraphs":["Allow plugins to take control before we discard \"glob\""],"title":"Core source comments"},{"paragraphs":["src/backend/optimizer/plan/planner.c:735"],"title":"Call sites"},{"code":"\t\tif (jit_tuple_deforming)\n\t\t\tresult-\u003ejitFlags |= PGJIT_DEFORM;\n\t}\n\n\t/* Allow plugins to take control before we discard \"glob\" */\n\tif (planner_shutdown_hook)\n\t\t(*planner_shutdown_hook) (glob, parse, query_string, result);\n\n\tif (glob-\u003epartition_directory != NULL)\n\t\tDestroyPartitionDirectory(glob-\u003epartition_directory);\n\n\treturn result;\n}\n\n","paragraphs":[],"title":"Core call context: src/backend/optimizer/plan/planner.c:729–743"}]}},"RequestedLocale":"zh-Hans","Fallback":true,"Versions":["19","20"],"Locales":["en"],"Signatures":null,"Spellings":null,"SQLState":null,"Evidence":null}
