{"kind": "plan", "major": "18", "item": {"slug": "bitmapor", "name": "BitmapOr", "name_zh": "BitmapOr", "category": "\u4f4d\u56fe", "summary": "\u5bf9\u5404\u5b50\u8ba1\u5212\u4ea7\u751f\u7684\u4f4d\u56fe\u6c42\u5e76\u96c6\u3002", "aliases": ["BitmapOr", "T_BitmapOr"], "content_hash": "334c545801a63cdfa43a7dfce67da292fc41a97b57f52898b3e692ee60b6d032", "versions": {"10": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_BitmapOr"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "BitmapOr"}, {"label": "\u8f93\u5165", "value": "\u4ea7\u751f\u4f4d\u56fe\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\uff0c\u4e0d\u662f\u5143\u7ec4\u6d41"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitBitmapOr"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "bitmap-lossification"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/source/v10.23/postgresql-10.23.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "7ce2244a52bf2d4172e1b03c50e1ab2505225fe2806a50e3f068405637157a27", "archive_sha256": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9"}, {"url": "https://ftp.postgresql.org/pub/source/v10.23/postgresql-10.23.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "66152ac93c470e2705adfef9a4c10ad3aa1beccb7baccf0b16dd96f3d59a0ec0", "archive_sha256": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9"}], "mechanism": "bitmap-lossification", "description": "\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "BitmapOr", "identity": "BitmapOr"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=10", "label": "EXPLAIN"}, {"url": "/docs/10/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/10/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/guc/work_mem/?v=10", "label": "work_mem"}], "release": {"ref": "PostgreSQL 10.23 source archive", "label": "10.23", "major": "10", "channel": "historical", "revision": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9", "source_url": "https://ftp.postgresql.org/pub/source/v10.23/postgresql-10.23.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v10.23/postgresql-10.23.tar.bz2", "line": 918, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:918", "sha256": "a785298532047cfeda969e78c3597a343dc1c56d61ba85830b0f16a02a14b5a1", "archive_sha256": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9"}, {"url": "https://ftp.postgresql.org/pub/source/v10.23/postgresql-10.23.tar.bz2", "line": 199, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:199", "sha256": "cea76648bb38ae55f18f989768bee1a4ee025691ceea0f86bccb29dcdc166acc", "archive_sha256": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9"}, {"url": "https://ftp.postgresql.org/pub/source/v10.23/postgresql-10.23.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "7ce2244a52bf2d4172e1b03c50e1ab2505225fe2806a50e3f068405637157a27", "archive_sha256": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9"}, {"url": "https://ftp.postgresql.org/pub/source/v10.23/postgresql-10.23.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "d562c321108844798cd234303fffb618f13d4ee3f3a5ac79bfd963b077e47c22", "archive_sha256": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9"}, {"url": "https://ftp.postgresql.org/pub/source/v10.23/postgresql-10.23.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "66152ac93c470e2705adfef9a4c10ad3aa1beccb7baccf0b16dd96f3d59a0ec0", "archive_sha256": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9"}, {"url": "https://pg.center/docs/10/using-explain.html#USING-EXPLAIN-CAVEATS", "path": "using-explain.html", "label": "PostgreSQL 10.23 \u00b7 using-explain", "sha256": "a4b4304aedb0a2da0145cc7c35b03b319a5c7ee3df35a8ef84ab6d3a610f98f3", "language": "en", "original_url": "/docs/10/using-explain.html#USING-EXPLAIN-CAVEATS"}], "node_tag": "T_BitmapOr", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aBitmapOr.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u540c\u7248\u672c\u624b\u518c\u8bf4\u660e", "paragraphs": ["\u7531\u4e8e\u5b9e\u73b0\u4e0a\u7684\u9650\u5236\uff0cBitmapAnd \u548c BitmapOr \u8282\u70b9\u62a5\u544a\u7684\u5b9e\u9645\u884c\u6570\u59cb\u7ec8\u4e3a\u96f6\u3002"]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["\u8bf4\u660e\uff1aBitmapOr \u4e0d\u4f7f\u7528\u5de6\u53f3\u5b50\u6811\uff0c\u800c\u50cf Append \u4e00\u6837\u7ef4\u62a4\u5b50\u8ba1\u5212\u5217\u8868\u3002\u4e0d\u8fc7\u5176\u903b\u8f91\u6bd4 Append \u7b80\u5355\u5f97\u591a\uff0c\u56e0\u4e3a\u65e0\u9700\u5904\u7406\u6b63\u5411\u6216\u53cd\u5411\u6267\u884c\u3002", "BitmapOr \u8ba1\u5212\u6ca1\u6709\u8868\u8fbe\u5f0f\u4e0a\u4e0b\u6587\uff0c\u56e0\u4e3a\u5b83\u4eec\u4ece\u4e0d\u8c03\u7528 ExecQual \u6216 ExecProject\uff0c\u4e5f\u4e0d\u9700\u8981\u5143\u7ec4\u69fd\u3002", "\u5bf9\u6bcf\u4e2a\u5f85\u6267\u884c\u8ba1\u5212\u8c03\u7528 ExecInitNode\uff0c\u5e76\u5c06\u7ed3\u679c\u4fdd\u5b58\u5230 bitmapplanstates \u6570\u7ec4\u3002", "\u53ef\u5bf9 BitmapIndexScan \u5b50\u8282\u70b9\u4f5c\u7279\u6b8a\u5904\u7406\uff0c\u907f\u514d\u4e3a\u6bcf\u4e2a\u5b50\u8282\u70b9\u663e\u5f0f\u8c03\u7528 tbm_union\uff1a\u76f4\u63a5\u4e0b\u4f20\u5f53\u524d\u7ed3\u679c\u4f4d\u56fe\uff0c\u8ba9\u5b50\u8282\u70b9\u5c06\u7ed3\u679c\u6309\u4f4d OR \u5408\u5e76\u8fdb\u53bb\u3002", "ExecReScan \u4e0d\u77e5\u9053\u5f53\u524d\u8282\u70b9\u7684\u5b50\u8ba1\u5212\uff0c\u56e0\u6b64\u5fc5\u987b\u81ea\u884c\u901a\u77e5\u5b50\u8ba1\u5212\u54ea\u4e9b\u53c2\u6570\u53d1\u751f\u4e86\u53d8\u5316\u3002"]}, {"code": "case T_BitmapOr:\n\t\t\tpname = sname = \"BitmapOr\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "strategies": [], "description": ["\u5bf9\u5404\u5b50\u8ba1\u5212\u4ea7\u751f\u7684\u4f4d\u56fe\u6c42\u5e76\u96c6\u3002"], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/versions/10/description/0": "Unions bitmaps produced by its child plans.", "/versions/10/facts/0/label": "Core node tag", "/versions/10/facts/1/label": "Structured EXPLAIN Node Type", "/versions/10/facts/2/label": "Inputs", "/versions/10/facts/2/value": "Bitmap-producing child plans", "/versions/10/facts/3/label": "Output", "/versions/10/facts/3/value": "Tuple-location bitmap, not a tuple stream", "/versions/10/facts/4/label": "Executor initializer", "/versions/10/facts/5/label": "Memory mechanism", "/versions/10/tables/0/title": "EXPLAIN labels in this source build", "/versions/10/related/1/label": "Using EXPLAIN", "/versions/10/related/2/label": "Parallel plans", "/versions/10/sections/0/title": "EXPLAIN names and attributes", "/versions/10/sections/1/title": "Memory and temporary storage", "/versions/10/sections/2/title": "Parallel execution and instrumentation", "/versions/10/sections/3/title": "Same-version manual discussion", "/versions/10/sections/4/title": "Executor implementation notes", "/versions/10/sections/5/title": "EXPLAIN identity in core source", "/versions/10/memory/description": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/10/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/10/sections/0/paragraphs/1": "Text names recorded by this source: BitmapOr.", "/versions/10/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/10/sections/1/paragraphs/0": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/10/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/10/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/10/sections/3/paragraphs/0": "BitmapAnd and BitmapOr nodes always report their actual row counts as zero, due to implementation limitations.", "/versions/10/sections/4/paragraphs/0": "NOTES BitmapOr nodes don't make use of their left and right subtrees, rather they maintain a list of subplans, much like Append nodes. The logic is much simpler than Append, however, since we needn't cope with forward/backward execution.", "/versions/10/sections/4/paragraphs/1": "BitmapOr plans don't have expression contexts because they never call ExecQual or ExecProject. They don't need any tuple slots either.", "/versions/10/sections/4/paragraphs/2": "call ExecInitNode on each of the plans to be executed and save the results into the array \"bitmapplanstates\".", "/versions/10/sections/4/paragraphs/3": "We can special-case BitmapIndexScan children to avoid an explicit tbm_union step for each child: just pass down the current result bitmap and let the child OR directly into it.", "/versions/10/sections/4/paragraphs/4": "ExecReScan doesn't know about my subplans, so I have to do changed-parameter signaling myself.", "/versions/10/tables/0/columns/0/label": "Text-format label", "/versions/10/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "00707544822ea37b2daa98f0f642e99cedf861a9785ea0f12f3c6ce394b84431"}, "evidence_kind": "source and documentation", "explain_names": ["BitmapOr"], "partial_modes": [], "comparison_data": {"node_tag": "T_BitmapOr", "strategies": [], "text_names": ["BitmapOr"], "initializer": "ExecInitBitmapOr", "partial_modes": [], "memory_mechanism": "bitmap-lossification", "parallel_callbacks": []}, "comparison_hash": "c0ca503a6029c37ec720213dcdc3094997eb194d4920da68f94a7420d3e8f1d2", "explain_prefixes": ["Parallel"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeBitmapOr.c"}, "parallel_callbacks": []}, "11": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_BitmapOr"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "BitmapOr"}, {"label": "\u8f93\u5165", "value": "\u4ea7\u751f\u4f4d\u56fe\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\uff0c\u4e0d\u662f\u5143\u7ec4\u6d41"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitBitmapOr"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "bitmap-lossification"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/source/v11.22/postgresql-11.22.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "fe542bc106cc764b0fca94e021870478945c29fafb5d08e8f2e99eeb3762a632", "archive_sha256": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0"}, {"url": "https://ftp.postgresql.org/pub/source/v11.22/postgresql-11.22.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "a47e915ced1ae75d21b8d7b7b67ae09c4bf230069208aa5d9f5b6c2ca6ae85d1", "archive_sha256": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0"}], "mechanism": "bitmap-lossification", "description": "\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "BitmapOr", "identity": "BitmapOr"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=11", "label": "EXPLAIN"}, {"url": "/docs/11/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/11/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/guc/work_mem/?v=11", "label": "work_mem"}], "release": {"ref": "PostgreSQL 11.22 source archive", "label": "11.22", "major": "11", "channel": "historical", "revision": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0", "source_url": "https://ftp.postgresql.org/pub/source/v11.22/postgresql-11.22.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v11.22/postgresql-11.22.tar.bz2", "line": 1043, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1043", "sha256": "9df8400c1a4377179572ceb916d6020fca4e2760f74bf416d77ed97476523bbd", "archive_sha256": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0"}, {"url": "https://ftp.postgresql.org/pub/source/v11.22/postgresql-11.22.tar.bz2", "line": 199, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:199", "sha256": "95ef4d4a5df4c29f14af9763fae2c530449bdacdf3853d9ff297adf1fed6153b", "archive_sha256": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0"}, {"url": "https://ftp.postgresql.org/pub/source/v11.22/postgresql-11.22.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "fe542bc106cc764b0fca94e021870478945c29fafb5d08e8f2e99eeb3762a632", "archive_sha256": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0"}, {"url": "https://ftp.postgresql.org/pub/source/v11.22/postgresql-11.22.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "5e0511194183800e8d6eb293fd4b40639c7d3118e2d199c8e7865ba4fa4cf67f", "archive_sha256": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0"}, {"url": "https://ftp.postgresql.org/pub/source/v11.22/postgresql-11.22.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "a47e915ced1ae75d21b8d7b7b67ae09c4bf230069208aa5d9f5b6c2ca6ae85d1", "archive_sha256": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0"}, {"url": "https://pg.center/docs/11/using-explain.html#USING-EXPLAIN-CAVEATS", "path": "using-explain.html", "label": "PostgreSQL 11.22 \u00b7 using-explain", "sha256": "8411bc78085d4737e32d7cca103d859da6c6539e33ec5e2fba46e74c6f199d8a", "language": "en", "original_url": "/docs/11/using-explain.html#USING-EXPLAIN-CAVEATS"}], "node_tag": "T_BitmapOr", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aBitmapOr.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u540c\u7248\u672c\u624b\u518c\u8bf4\u660e", "paragraphs": ["\u7531\u4e8e\u5b9e\u73b0\u4e0a\u7684\u9650\u5236\uff0cBitmapAnd \u548c BitmapOr \u8282\u70b9\u62a5\u544a\u7684\u5b9e\u9645\u884c\u6570\u59cb\u7ec8\u4e3a\u96f6\u3002"]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["\u8bf4\u660e\uff1aBitmapOr \u4e0d\u4f7f\u7528\u5de6\u53f3\u5b50\u6811\uff0c\u800c\u50cf Append \u4e00\u6837\u7ef4\u62a4\u5b50\u8ba1\u5212\u5217\u8868\u3002\u4e0d\u8fc7\u5176\u903b\u8f91\u6bd4 Append \u7b80\u5355\u5f97\u591a\uff0c\u56e0\u4e3a\u65e0\u9700\u5904\u7406\u6b63\u5411\u6216\u53cd\u5411\u6267\u884c\u3002", "\u5bf9\u6bcf\u4e2a\u5f85\u6267\u884c\u8ba1\u5212\u8c03\u7528 ExecInitNode\uff0c\u5e76\u5c06\u7ed3\u679c\u4fdd\u5b58\u5230 bitmapplanstates \u6570\u7ec4\u3002", "BitmapOr \u8ba1\u5212\u6ca1\u6709\u8868\u8fbe\u5f0f\u4e0a\u4e0b\u6587\uff0c\u56e0\u4e3a\u5b83\u4eec\u4ece\u4e0d\u8c03\u7528 ExecQual \u6216 ExecProject\uff0c\u4e5f\u4e0d\u9700\u8981\u5143\u7ec4\u69fd\u3002", "\u53ef\u5bf9 BitmapIndexScan \u5b50\u8282\u70b9\u4f5c\u7279\u6b8a\u5904\u7406\uff0c\u907f\u514d\u4e3a\u6bcf\u4e2a\u5b50\u8282\u70b9\u663e\u5f0f\u8c03\u7528 tbm_union\uff1a\u76f4\u63a5\u4e0b\u4f20\u5f53\u524d\u7ed3\u679c\u4f4d\u56fe\uff0c\u8ba9\u5b50\u8282\u70b9\u5c06\u7ed3\u679c\u6309\u4f4d OR \u5408\u5e76\u8fdb\u53bb\u3002", "ExecReScan \u4e0d\u77e5\u9053\u5f53\u524d\u8282\u70b9\u7684\u5b50\u8ba1\u5212\uff0c\u56e0\u6b64\u5fc5\u987b\u81ea\u884c\u901a\u77e5\u5b50\u8ba1\u5212\u54ea\u4e9b\u53c2\u6570\u53d1\u751f\u4e86\u53d8\u5316\u3002"]}, {"code": "case T_BitmapOr:\n\t\t\tpname = sname = \"BitmapOr\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "strategies": [], "description": ["\u5bf9\u5404\u5b50\u8ba1\u5212\u4ea7\u751f\u7684\u4f4d\u56fe\u6c42\u5e76\u96c6\u3002"], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/versions/11/description/0": "Unions bitmaps produced by its child plans.", "/versions/11/facts/0/label": "Core node tag", "/versions/11/facts/1/label": "Structured EXPLAIN Node Type", "/versions/11/facts/2/label": "Inputs", "/versions/11/facts/2/value": "Bitmap-producing child plans", "/versions/11/facts/3/label": "Output", "/versions/11/facts/3/value": "Tuple-location bitmap, not a tuple stream", "/versions/11/facts/4/label": "Executor initializer", "/versions/11/facts/5/label": "Memory mechanism", "/versions/11/tables/0/title": "EXPLAIN labels in this source build", "/versions/11/related/1/label": "Using EXPLAIN", "/versions/11/related/2/label": "Parallel plans", "/versions/11/sections/0/title": "EXPLAIN names and attributes", "/versions/11/sections/1/title": "Memory and temporary storage", "/versions/11/sections/2/title": "Parallel execution and instrumentation", "/versions/11/sections/3/title": "Same-version manual discussion", "/versions/11/sections/4/title": "Executor implementation notes", "/versions/11/sections/5/title": "EXPLAIN identity in core source", "/versions/11/memory/description": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/11/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/11/sections/0/paragraphs/1": "Text names recorded by this source: BitmapOr.", "/versions/11/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/11/sections/1/paragraphs/0": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/11/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/11/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/11/sections/3/paragraphs/0": "BitmapAnd and BitmapOr nodes always report their actual row counts as zero, due to implementation limitations.", "/versions/11/sections/4/paragraphs/0": "NOTES BitmapOr nodes don't make use of their left and right subtrees, rather they maintain a list of subplans, much like Append nodes. The logic is much simpler than Append, however, since we needn't cope with forward/backward execution.", "/versions/11/sections/4/paragraphs/1": "call ExecInitNode on each of the plans to be executed and save the results into the array \"bitmapplanstates\".", "/versions/11/sections/4/paragraphs/2": "BitmapOr plans don't have expression contexts because they never call ExecQual or ExecProject. They don't need any tuple slots either.", "/versions/11/sections/4/paragraphs/3": "We can special-case BitmapIndexScan children to avoid an explicit tbm_union step for each child: just pass down the current result bitmap and let the child OR directly into it.", "/versions/11/sections/4/paragraphs/4": "ExecReScan doesn't know about my subplans, so I have to do changed-parameter signaling myself.", "/versions/11/tables/0/columns/0/label": "Text-format label", "/versions/11/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "2984fbc92eca3f5d9571ec130a4265caca80a7c61e3a43e0205828d8cd658b13"}, "evidence_kind": "source and documentation", "explain_names": ["BitmapOr"], "partial_modes": [], "comparison_data": {"node_tag": "T_BitmapOr", "strategies": [], "text_names": ["BitmapOr"], "initializer": "ExecInitBitmapOr", "partial_modes": [], "memory_mechanism": "bitmap-lossification", "parallel_callbacks": []}, "comparison_hash": "c0ca503a6029c37ec720213dcdc3094997eb194d4920da68f94a7420d3e8f1d2", "explain_prefixes": ["Parallel"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeBitmapOr.c"}, "parallel_callbacks": []}, "12": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_BitmapOr"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "BitmapOr"}, {"label": "\u8f93\u5165", "value": "\u4ea7\u751f\u4f4d\u56fe\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\uff0c\u4e0d\u662f\u5143\u7ec4\u6d41"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitBitmapOr"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "bitmap-lossification"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "00f6348b2dd4ed868e6f2f8dae8662651547db206664e4682c3557c6a798f19b", "archive_sha256": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}, {"url": "https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "8a18d2e770adab40a9172ebc6895501ec22f650b479c4e9ce44ca010c57ad24d", "archive_sha256": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}], "mechanism": "bitmap-lossification", "description": "\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "BitmapOr", "identity": "BitmapOr"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=12", "label": "EXPLAIN"}, {"url": "/docs/12/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/12/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/guc/work_mem/?v=12", "label": "work_mem"}], "release": {"ref": "PostgreSQL 12.22 source archive", "label": "12.22", "major": "12", "channel": "historical", "revision": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b", "source_url": "https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2", "line": 1114, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1114", "sha256": "d02ea84fdaa201de5d9360645a9f24bfbd2c31f7d45a639e09560ac0e6b6471d", "archive_sha256": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}, {"url": "https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2", "line": 199, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:199", "sha256": "311b17379fe54e3f342fe5ad41c43afbdfa1b844978db2bb2eb22b82520d3256", "archive_sha256": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}, {"url": "https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "00f6348b2dd4ed868e6f2f8dae8662651547db206664e4682c3557c6a798f19b", "archive_sha256": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}, {"url": "https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "b0c4a0aeb48660ce06e5e700d5529ca9066fd16682bd15783d6e71b5420b07b0", "archive_sha256": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}, {"url": "https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "8a18d2e770adab40a9172ebc6895501ec22f650b479c4e9ce44ca010c57ad24d", "archive_sha256": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}, {"url": "https://pg.center/docs/12/using-explain.html#USING-EXPLAIN-CAVEATS", "path": "using-explain.html", "label": "PostgreSQL 12.22 \u00b7 using-explain", "sha256": "06297525f2180b07e752837a3351be9c871b56559f535bcd0a67dec9baac10c0", "language": "en", "original_url": "/docs/12/using-explain.html#USING-EXPLAIN-CAVEATS"}], "node_tag": "T_BitmapOr", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aBitmapOr.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u540c\u7248\u672c\u624b\u518c\u8bf4\u660e", "paragraphs": ["\u7531\u4e8e\u5b9e\u73b0\u4e0a\u7684\u9650\u5236\uff0cBitmapAnd \u548c BitmapOr \u8282\u70b9\u62a5\u544a\u7684\u5b9e\u9645\u884c\u6570\u59cb\u7ec8\u4e3a\u96f6\u3002"]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["\u8bf4\u660e\uff1aBitmapOr \u4e0d\u4f7f\u7528\u5de6\u53f3\u5b50\u6811\uff0c\u800c\u50cf Append \u4e00\u6837\u7ef4\u62a4\u5b50\u8ba1\u5212\u5217\u8868\u3002\u4e0d\u8fc7\u5176\u903b\u8f91\u6bd4 Append \u7b80\u5355\u5f97\u591a\uff0c\u56e0\u4e3a\u65e0\u9700\u5904\u7406\u6b63\u5411\u6216\u53cd\u5411\u6267\u884c\u3002", "\u5bf9\u6bcf\u4e2a\u5f85\u6267\u884c\u8ba1\u5212\u8c03\u7528 ExecInitNode\uff0c\u5e76\u5c06\u7ed3\u679c\u4fdd\u5b58\u5230 bitmapplanstates \u6570\u7ec4\u3002", "BitmapOr \u8ba1\u5212\u6ca1\u6709\u8868\u8fbe\u5f0f\u4e0a\u4e0b\u6587\uff0c\u56e0\u4e3a\u5b83\u4eec\u4ece\u4e0d\u8c03\u7528 ExecQual \u6216 ExecProject\uff0c\u4e5f\u4e0d\u9700\u8981\u5143\u7ec4\u69fd\u3002", "\u53ef\u5bf9 BitmapIndexScan \u5b50\u8282\u70b9\u4f5c\u7279\u6b8a\u5904\u7406\uff0c\u907f\u514d\u4e3a\u6bcf\u4e2a\u5b50\u8282\u70b9\u663e\u5f0f\u8c03\u7528 tbm_union\uff1a\u76f4\u63a5\u4e0b\u4f20\u5f53\u524d\u7ed3\u679c\u4f4d\u56fe\uff0c\u8ba9\u5b50\u8282\u70b9\u5c06\u7ed3\u679c\u6309\u4f4d OR \u5408\u5e76\u8fdb\u53bb\u3002", "ExecReScan \u4e0d\u77e5\u9053\u5f53\u524d\u8282\u70b9\u7684\u5b50\u8ba1\u5212\uff0c\u56e0\u6b64\u5fc5\u987b\u81ea\u884c\u901a\u77e5\u5b50\u8ba1\u5212\u54ea\u4e9b\u53c2\u6570\u53d1\u751f\u4e86\u53d8\u5316\u3002"]}, {"code": "case T_BitmapOr:\n\t\t\tpname = sname = \"BitmapOr\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "strategies": [], "description": ["\u5bf9\u5404\u5b50\u8ba1\u5212\u4ea7\u751f\u7684\u4f4d\u56fe\u6c42\u5e76\u96c6\u3002"], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/versions/12/description/0": "Unions bitmaps produced by its child plans.", "/versions/12/facts/0/label": "Core node tag", "/versions/12/facts/1/label": "Structured EXPLAIN Node Type", "/versions/12/facts/2/label": "Inputs", "/versions/12/facts/2/value": "Bitmap-producing child plans", "/versions/12/facts/3/label": "Output", "/versions/12/facts/3/value": "Tuple-location bitmap, not a tuple stream", "/versions/12/facts/4/label": "Executor initializer", "/versions/12/facts/5/label": "Memory mechanism", "/versions/12/tables/0/title": "EXPLAIN labels in this source build", "/versions/12/related/1/label": "Using EXPLAIN", "/versions/12/related/2/label": "Parallel plans", "/versions/12/sections/0/title": "EXPLAIN names and attributes", "/versions/12/sections/1/title": "Memory and temporary storage", "/versions/12/sections/2/title": "Parallel execution and instrumentation", "/versions/12/sections/3/title": "Same-version manual discussion", "/versions/12/sections/4/title": "Executor implementation notes", "/versions/12/sections/5/title": "EXPLAIN identity in core source", "/versions/12/memory/description": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/12/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/12/sections/0/paragraphs/1": "Text names recorded by this source: BitmapOr.", "/versions/12/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/12/sections/1/paragraphs/0": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/12/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/12/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/12/sections/3/paragraphs/0": "BitmapAnd and BitmapOr nodes always report their actual row counts as zero, due to implementation limitations.", "/versions/12/sections/4/paragraphs/0": "NOTES BitmapOr nodes don't make use of their left and right subtrees, rather they maintain a list of subplans, much like Append nodes. The logic is much simpler than Append, however, since we needn't cope with forward/backward execution.", "/versions/12/sections/4/paragraphs/1": "call ExecInitNode on each of the plans to be executed and save the results into the array \"bitmapplanstates\".", "/versions/12/sections/4/paragraphs/2": "BitmapOr plans don't have expression contexts because they never call ExecQual or ExecProject. They don't need any tuple slots either.", "/versions/12/sections/4/paragraphs/3": "We can special-case BitmapIndexScan children to avoid an explicit tbm_union step for each child: just pass down the current result bitmap and let the child OR directly into it.", "/versions/12/sections/4/paragraphs/4": "ExecReScan doesn't know about my subplans, so I have to do changed-parameter signaling myself.", "/versions/12/tables/0/columns/0/label": "Text-format label", "/versions/12/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "c47c6279baa93a4403b00303c1c2f1799a062b3781835c9be4a92c307c84c908"}, "evidence_kind": "source and documentation", "explain_names": ["BitmapOr"], "partial_modes": [], "comparison_data": {"node_tag": "T_BitmapOr", "strategies": [], "text_names": ["BitmapOr"], "initializer": "ExecInitBitmapOr", "partial_modes": [], "memory_mechanism": "bitmap-lossification", "parallel_callbacks": []}, "comparison_hash": "c0ca503a6029c37ec720213dcdc3094997eb194d4920da68f94a7420d3e8f1d2", "explain_prefixes": ["Parallel"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeBitmapOr.c"}, "parallel_callbacks": []}, "13": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_BitmapOr"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "BitmapOr"}, {"label": "\u8f93\u5165", "value": "\u4ea7\u751f\u4f4d\u56fe\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\uff0c\u4e0d\u662f\u5143\u7ec4\u6d41"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitBitmapOr"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "bitmap-lossification"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/source/v13.23/postgresql-13.23.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "96e6d1ff7286faf41be8aaac14215f63475484da8c54f8aca1ca91500e0c01d1", "archive_sha256": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}, {"url": "https://ftp.postgresql.org/pub/source/v13.23/postgresql-13.23.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "a0823f106dd0af7415c44a788a8b258dc13afc6dab320d0dec0a2d17f418fdb8", "archive_sha256": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}], "mechanism": "bitmap-lossification", "description": "\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "BitmapOr", "identity": "BitmapOr"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=13", "label": "EXPLAIN"}, {"url": "/docs/13/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/13/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/guc/work_mem/?v=13", "label": "work_mem"}], "release": {"ref": "PostgreSQL 13.23 source archive", "label": "13.23", "major": "13", "channel": "historical", "revision": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6", "source_url": "https://ftp.postgresql.org/pub/source/v13.23/postgresql-13.23.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v13.23/postgresql-13.23.tar.bz2", "line": 1172, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1172", "sha256": "541713e0e7f1c9cc352c2b6028964d440c19d2678a4463000094c24a88c1e730", "archive_sha256": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}, {"url": "https://ftp.postgresql.org/pub/source/v13.23/postgresql-13.23.tar.bz2", "line": 199, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:199", "sha256": "d085ee99acfa00587e6ade3a1d9f8108a0566beedbbee3f54a50c9fc0cc2e875", "archive_sha256": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}, {"url": "https://ftp.postgresql.org/pub/source/v13.23/postgresql-13.23.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "96e6d1ff7286faf41be8aaac14215f63475484da8c54f8aca1ca91500e0c01d1", "archive_sha256": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}, {"url": "https://ftp.postgresql.org/pub/source/v13.23/postgresql-13.23.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "dcb296833777b02008c4b6bae8e8f7c6423b7ffba21f36702597c9d596d039ab", "archive_sha256": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}, {"url": "https://ftp.postgresql.org/pub/source/v13.23/postgresql-13.23.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "a0823f106dd0af7415c44a788a8b258dc13afc6dab320d0dec0a2d17f418fdb8", "archive_sha256": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}, {"url": "https://pg.center/docs/13/using-explain.html#USING-EXPLAIN-CAVEATS", "path": "using-explain.html", "label": "PostgreSQL 13.23 \u00b7 using-explain", "sha256": "650fd8629382d5dc8f9f8412c50ec5f32442a9ad2f98ca88e5348a7c2bd0ac7a", "language": "en", "original_url": "/docs/13/using-explain.html#USING-EXPLAIN-CAVEATS"}], "node_tag": "T_BitmapOr", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aBitmapOr.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u540c\u7248\u672c\u624b\u518c\u8bf4\u660e", "paragraphs": ["\u7531\u4e8e\u5b9e\u73b0\u4e0a\u7684\u9650\u5236\uff0cBitmapAnd \u548c BitmapOr \u8282\u70b9\u62a5\u544a\u7684\u5b9e\u9645\u884c\u6570\u59cb\u7ec8\u4e3a\u96f6\u3002"]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["\u8bf4\u660e\uff1aBitmapOr \u4e0d\u4f7f\u7528\u5de6\u53f3\u5b50\u6811\uff0c\u800c\u50cf Append \u4e00\u6837\u7ef4\u62a4\u5b50\u8ba1\u5212\u5217\u8868\u3002\u4e0d\u8fc7\u5176\u903b\u8f91\u6bd4 Append \u7b80\u5355\u5f97\u591a\uff0c\u56e0\u4e3a\u65e0\u9700\u5904\u7406\u6b63\u5411\u6216\u53cd\u5411\u6267\u884c\u3002", "\u5bf9\u6bcf\u4e2a\u5f85\u6267\u884c\u8ba1\u5212\u8c03\u7528 ExecInitNode\uff0c\u5e76\u5c06\u7ed3\u679c\u4fdd\u5b58\u5230 bitmapplanstates \u6570\u7ec4\u3002", "BitmapOr \u8ba1\u5212\u6ca1\u6709\u8868\u8fbe\u5f0f\u4e0a\u4e0b\u6587\uff0c\u56e0\u4e3a\u5b83\u4eec\u4ece\u4e0d\u8c03\u7528 ExecQual \u6216 ExecProject\uff0c\u4e5f\u4e0d\u9700\u8981\u5143\u7ec4\u69fd\u3002", "\u53ef\u5bf9 BitmapIndexScan \u5b50\u8282\u70b9\u4f5c\u7279\u6b8a\u5904\u7406\uff0c\u907f\u514d\u4e3a\u6bcf\u4e2a\u5b50\u8282\u70b9\u663e\u5f0f\u8c03\u7528 tbm_union\uff1a\u76f4\u63a5\u4e0b\u4f20\u5f53\u524d\u7ed3\u679c\u4f4d\u56fe\uff0c\u8ba9\u5b50\u8282\u70b9\u5c06\u7ed3\u679c\u6309\u4f4d OR \u5408\u5e76\u8fdb\u53bb\u3002", "ExecReScan \u4e0d\u77e5\u9053\u5f53\u524d\u8282\u70b9\u7684\u5b50\u8ba1\u5212\uff0c\u56e0\u6b64\u5fc5\u987b\u81ea\u884c\u901a\u77e5\u5b50\u8ba1\u5212\u54ea\u4e9b\u53c2\u6570\u53d1\u751f\u4e86\u53d8\u5316\u3002"]}, {"code": "case T_BitmapOr:\n\t\t\tpname = sname = \"BitmapOr\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "strategies": [], "description": ["\u5bf9\u5404\u5b50\u8ba1\u5212\u4ea7\u751f\u7684\u4f4d\u56fe\u6c42\u5e76\u96c6\u3002"], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/versions/13/description/0": "Unions bitmaps produced by its child plans.", "/versions/13/facts/0/label": "Core node tag", "/versions/13/facts/1/label": "Structured EXPLAIN Node Type", "/versions/13/facts/2/label": "Inputs", "/versions/13/facts/2/value": "Bitmap-producing child plans", "/versions/13/facts/3/label": "Output", "/versions/13/facts/3/value": "Tuple-location bitmap, not a tuple stream", "/versions/13/facts/4/label": "Executor initializer", "/versions/13/facts/5/label": "Memory mechanism", "/versions/13/tables/0/title": "EXPLAIN labels in this source build", "/versions/13/related/1/label": "Using EXPLAIN", "/versions/13/related/2/label": "Parallel plans", "/versions/13/sections/0/title": "EXPLAIN names and attributes", "/versions/13/sections/1/title": "Memory and temporary storage", "/versions/13/sections/2/title": "Parallel execution and instrumentation", "/versions/13/sections/3/title": "Same-version manual discussion", "/versions/13/sections/4/title": "Executor implementation notes", "/versions/13/sections/5/title": "EXPLAIN identity in core source", "/versions/13/memory/description": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/13/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/13/sections/0/paragraphs/1": "Text names recorded by this source: BitmapOr.", "/versions/13/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/13/sections/1/paragraphs/0": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/13/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/13/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/13/sections/3/paragraphs/0": "BitmapAnd and BitmapOr nodes always report their actual row counts as zero, due to implementation limitations.", "/versions/13/sections/4/paragraphs/0": "NOTES BitmapOr nodes don't make use of their left and right subtrees, rather they maintain a list of subplans, much like Append nodes. The logic is much simpler than Append, however, since we needn't cope with forward/backward execution.", "/versions/13/sections/4/paragraphs/1": "call ExecInitNode on each of the plans to be executed and save the results into the array \"bitmapplanstates\".", "/versions/13/sections/4/paragraphs/2": "BitmapOr plans don't have expression contexts because they never call ExecQual or ExecProject. They don't need any tuple slots either.", "/versions/13/sections/4/paragraphs/3": "We can special-case BitmapIndexScan children to avoid an explicit tbm_union step for each child: just pass down the current result bitmap and let the child OR directly into it.", "/versions/13/sections/4/paragraphs/4": "ExecReScan doesn't know about my subplans, so I have to do changed-parameter signaling myself.", "/versions/13/tables/0/columns/0/label": "Text-format label", "/versions/13/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "346186fbdb88c919ce836127aedceb86ec2dcce8494ce7aeda9bcd4244f72e38"}, "evidence_kind": "source and documentation", "explain_names": ["BitmapOr"], "partial_modes": [], "comparison_data": {"node_tag": "T_BitmapOr", "strategies": [], "text_names": ["BitmapOr"], "initializer": "ExecInitBitmapOr", "partial_modes": [], "memory_mechanism": "bitmap-lossification", "parallel_callbacks": []}, "comparison_hash": "c0ca503a6029c37ec720213dcdc3094997eb194d4920da68f94a7420d3e8f1d2", "explain_prefixes": ["Parallel"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeBitmapOr.c"}, "parallel_callbacks": []}, "14": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_BitmapOr"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "BitmapOr"}, {"label": "\u8f93\u5165", "value": "\u4ea7\u751f\u4f4d\u56fe\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\uff0c\u4e0d\u662f\u5143\u7ec4\u6d41"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitBitmapOr"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "bitmap-lossification"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/source/v14.24/postgresql-14.24.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "b0d2caaac97ee1d68adb67d184a4e9340148a782b72a75891fcfb598aa85e783", "archive_sha256": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}, {"url": "https://ftp.postgresql.org/pub/source/v14.24/postgresql-14.24.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "6b86639c01e2be18b9e08a99d5aa46e09747cade936cc703d9d30bfe8d61fa1c", "archive_sha256": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}], "mechanism": "bitmap-lossification", "description": "\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "BitmapOr", "identity": "BitmapOr"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=14", "label": "EXPLAIN"}, {"url": "/docs/14/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/14/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/guc/work_mem/?v=14", "label": "work_mem"}], "release": {"ref": "PostgreSQL 14.24 source archive", "label": "14.24", "major": "14", "channel": "stable", "revision": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897", "source_url": "https://ftp.postgresql.org/pub/source/v14.24/postgresql-14.24.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v14.24/postgresql-14.24.tar.bz2", "line": 1208, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1208", "sha256": "e091be4e2a083b8dea39ccd09beedede22c1716ef974da66c214a44f48be8c41", "archive_sha256": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}, {"url": "https://ftp.postgresql.org/pub/source/v14.24/postgresql-14.24.tar.bz2", "line": 201, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:201", "sha256": "72da1c5ad457f1d92a39ab73531701794df858419e3b89d6e6cb7079634e68fa", "archive_sha256": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}, {"url": "https://ftp.postgresql.org/pub/source/v14.24/postgresql-14.24.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "b0d2caaac97ee1d68adb67d184a4e9340148a782b72a75891fcfb598aa85e783", "archive_sha256": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}, {"url": "https://ftp.postgresql.org/pub/source/v14.24/postgresql-14.24.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "302f51a16b570dba7ec4e7bc045f7df5800d21630280354d1a24025f3baec75d", "archive_sha256": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}, {"url": "https://ftp.postgresql.org/pub/source/v14.24/postgresql-14.24.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "6b86639c01e2be18b9e08a99d5aa46e09747cade936cc703d9d30bfe8d61fa1c", "archive_sha256": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}, {"url": "https://pg.center/docs/14/using-explain.html#USING-EXPLAIN-CAVEATS", "path": "using-explain.html", "label": "PostgreSQL 14.24 \u00b7 using-explain", "sha256": "7f5ab59cb21a035ada45ea3426c5d1cca3f781273483677f73fdd76753555206", "language": "en", "original_url": "/docs/14/using-explain.html#USING-EXPLAIN-CAVEATS"}], "node_tag": "T_BitmapOr", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aBitmapOr.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u540c\u7248\u672c\u624b\u518c\u8bf4\u660e", "paragraphs": ["\u7531\u4e8e\u5b9e\u73b0\u4e0a\u7684\u9650\u5236\uff0cBitmapAnd \u548c BitmapOr \u8282\u70b9\u62a5\u544a\u7684\u5b9e\u9645\u884c\u6570\u59cb\u7ec8\u4e3a\u96f6\u3002"]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["\u8bf4\u660e\uff1aBitmapOr \u4e0d\u4f7f\u7528\u5de6\u53f3\u5b50\u6811\uff0c\u800c\u50cf Append \u4e00\u6837\u7ef4\u62a4\u5b50\u8ba1\u5212\u5217\u8868\u3002\u4e0d\u8fc7\u5176\u903b\u8f91\u6bd4 Append \u7b80\u5355\u5f97\u591a\uff0c\u56e0\u4e3a\u65e0\u9700\u5904\u7406\u6b63\u5411\u6216\u53cd\u5411\u6267\u884c\u3002", "\u5bf9\u6bcf\u4e2a\u5f85\u6267\u884c\u8ba1\u5212\u8c03\u7528 ExecInitNode\uff0c\u5e76\u5c06\u7ed3\u679c\u4fdd\u5b58\u5230 bitmapplanstates \u6570\u7ec4\u3002", "BitmapOr \u8ba1\u5212\u6ca1\u6709\u8868\u8fbe\u5f0f\u4e0a\u4e0b\u6587\uff0c\u56e0\u4e3a\u5b83\u4eec\u4ece\u4e0d\u8c03\u7528 ExecQual \u6216 ExecProject\uff0c\u4e5f\u4e0d\u9700\u8981\u5143\u7ec4\u69fd\u3002", "\u53ef\u5bf9 BitmapIndexScan \u5b50\u8282\u70b9\u4f5c\u7279\u6b8a\u5904\u7406\uff0c\u907f\u514d\u4e3a\u6bcf\u4e2a\u5b50\u8282\u70b9\u663e\u5f0f\u8c03\u7528 tbm_union\uff1a\u76f4\u63a5\u4e0b\u4f20\u5f53\u524d\u7ed3\u679c\u4f4d\u56fe\uff0c\u8ba9\u5b50\u8282\u70b9\u5c06\u7ed3\u679c\u6309\u4f4d OR \u5408\u5e76\u8fdb\u53bb\u3002", "ExecReScan \u4e0d\u77e5\u9053\u5f53\u524d\u8282\u70b9\u7684\u5b50\u8ba1\u5212\uff0c\u56e0\u6b64\u5fc5\u987b\u81ea\u884c\u901a\u77e5\u5b50\u8ba1\u5212\u54ea\u4e9b\u53c2\u6570\u53d1\u751f\u4e86\u53d8\u5316\u3002"]}, {"code": "case T_BitmapOr:\n\t\t\tpname = sname = \"BitmapOr\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "strategies": [], "description": ["\u5bf9\u5404\u5b50\u8ba1\u5212\u4ea7\u751f\u7684\u4f4d\u56fe\u6c42\u5e76\u96c6\u3002"], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/versions/14/description/0": "Unions bitmaps produced by its child plans.", "/versions/14/facts/0/label": "Core node tag", "/versions/14/facts/1/label": "Structured EXPLAIN Node Type", "/versions/14/facts/2/label": "Inputs", "/versions/14/facts/2/value": "Bitmap-producing child plans", "/versions/14/facts/3/label": "Output", "/versions/14/facts/3/value": "Tuple-location bitmap, not a tuple stream", "/versions/14/facts/4/label": "Executor initializer", "/versions/14/facts/5/label": "Memory mechanism", "/versions/14/tables/0/title": "EXPLAIN labels in this source build", "/versions/14/related/1/label": "Using EXPLAIN", "/versions/14/related/2/label": "Parallel plans", "/versions/14/sections/0/title": "EXPLAIN names and attributes", "/versions/14/sections/1/title": "Memory and temporary storage", "/versions/14/sections/2/title": "Parallel execution and instrumentation", "/versions/14/sections/3/title": "Same-version manual discussion", "/versions/14/sections/4/title": "Executor implementation notes", "/versions/14/sections/5/title": "EXPLAIN identity in core source", "/versions/14/memory/description": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/14/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/14/sections/0/paragraphs/1": "Text names recorded by this source: BitmapOr.", "/versions/14/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/14/sections/1/paragraphs/0": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/14/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/14/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/14/sections/3/paragraphs/0": "BitmapAnd and BitmapOr nodes always report their actual row counts as zero, due to implementation limitations.", "/versions/14/sections/4/paragraphs/0": "NOTES BitmapOr nodes don't make use of their left and right subtrees, rather they maintain a list of subplans, much like Append nodes. The logic is much simpler than Append, however, since we needn't cope with forward/backward execution.", "/versions/14/sections/4/paragraphs/1": "call ExecInitNode on each of the plans to be executed and save the results into the array \"bitmapplanstates\".", "/versions/14/sections/4/paragraphs/2": "BitmapOr plans don't have expression contexts because they never call ExecQual or ExecProject. They don't need any tuple slots either.", "/versions/14/sections/4/paragraphs/3": "We can special-case BitmapIndexScan children to avoid an explicit tbm_union step for each child: just pass down the current result bitmap and let the child OR directly into it.", "/versions/14/sections/4/paragraphs/4": "ExecReScan doesn't know about my subplans, so I have to do changed-parameter signaling myself.", "/versions/14/tables/0/columns/0/label": "Text-format label", "/versions/14/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "559f5ce17a482181babd42c3ec9646a95652bcd9e288e72c443cc04ea8d05437"}, "evidence_kind": "source and documentation", "explain_names": ["BitmapOr"], "partial_modes": [], "comparison_data": {"node_tag": "T_BitmapOr", "strategies": [], "text_names": ["BitmapOr"], "initializer": "ExecInitBitmapOr", "partial_modes": [], "memory_mechanism": "bitmap-lossification", "parallel_callbacks": []}, "comparison_hash": "c0ca503a6029c37ec720213dcdc3094997eb194d4920da68f94a7420d3e8f1d2", "explain_prefixes": ["Parallel", "Async"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeBitmapOr.c"}, "parallel_callbacks": []}, "15": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_BitmapOr"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "BitmapOr"}, {"label": "\u8f93\u5165", "value": "\u4ea7\u751f\u4f4d\u56fe\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\uff0c\u4e0d\u662f\u5143\u7ec4\u6d41"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitBitmapOr"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "bitmap-lossification"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/source/v15.19/postgresql-15.19.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "d6831e8f332aba276ea49ee76e308e60ad324800640ac5722556af7b337cb030", "archive_sha256": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}, {"url": "https://ftp.postgresql.org/pub/source/v15.19/postgresql-15.19.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "4abf4a8e67412488d65490b4e292043351122be09f03af97150b384dc7ee11bb", "archive_sha256": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}], "mechanism": "bitmap-lossification", "description": "\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "BitmapOr", "identity": "BitmapOr"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=15", "label": "EXPLAIN"}, {"url": "/docs/15/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/15/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/guc/work_mem/?v=15", "label": "work_mem"}], "release": {"ref": "PostgreSQL 15.19 source archive", "label": "15.19", "major": "15", "channel": "stable", "revision": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89", "source_url": "https://ftp.postgresql.org/pub/source/v15.19/postgresql-15.19.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v15.19/postgresql-15.19.tar.bz2", "line": 1211, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1211", "sha256": "bb3b442d0f1b098aa8707335250102f027a596cd94117308bd16d1d36b258f5c", "archive_sha256": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}, {"url": "https://ftp.postgresql.org/pub/source/v15.19/postgresql-15.19.tar.bz2", "line": 201, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:201", "sha256": "19836c50a272741a4eac653541e655437c2e00710a541e5348d6a277d0669d7c", "archive_sha256": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}, {"url": "https://ftp.postgresql.org/pub/source/v15.19/postgresql-15.19.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "d6831e8f332aba276ea49ee76e308e60ad324800640ac5722556af7b337cb030", "archive_sha256": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}, {"url": "https://ftp.postgresql.org/pub/source/v15.19/postgresql-15.19.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "fb4a4c8165495299131173680bc02a950d88e1ff610231fd97997bc0c9afc1d7", "archive_sha256": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}, {"url": "https://ftp.postgresql.org/pub/source/v15.19/postgresql-15.19.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "4abf4a8e67412488d65490b4e292043351122be09f03af97150b384dc7ee11bb", "archive_sha256": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}, {"url": "https://pg.center/docs/15/using-explain.html#USING-EXPLAIN-CAVEATS", "path": "using-explain.html", "label": "PostgreSQL 15.19 \u00b7 using-explain", "sha256": "d1f509457c647da453d2575c772d91022a0f115dd84f9a3b20f5ff25a243648f", "language": "en", "original_url": "/docs/15/using-explain.html#USING-EXPLAIN-CAVEATS"}], "node_tag": "T_BitmapOr", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aBitmapOr.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u540c\u7248\u672c\u624b\u518c\u8bf4\u660e", "paragraphs": ["\u7531\u4e8e\u5b9e\u73b0\u4e0a\u7684\u9650\u5236\uff0cBitmapAnd \u548c BitmapOr \u8282\u70b9\u62a5\u544a\u7684\u5b9e\u9645\u884c\u6570\u59cb\u7ec8\u4e3a\u96f6\u3002"]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["\u8bf4\u660e\uff1aBitmapOr \u4e0d\u4f7f\u7528\u5de6\u53f3\u5b50\u6811\uff0c\u800c\u50cf Append \u4e00\u6837\u7ef4\u62a4\u5b50\u8ba1\u5212\u5217\u8868\u3002\u4e0d\u8fc7\u5176\u903b\u8f91\u6bd4 Append \u7b80\u5355\u5f97\u591a\uff0c\u56e0\u4e3a\u65e0\u9700\u5904\u7406\u6b63\u5411\u6216\u53cd\u5411\u6267\u884c\u3002", "\u5bf9\u6bcf\u4e2a\u5f85\u6267\u884c\u8ba1\u5212\u8c03\u7528 ExecInitNode\uff0c\u5e76\u5c06\u7ed3\u679c\u4fdd\u5b58\u5230 bitmapplanstates \u6570\u7ec4\u3002", "BitmapOr \u8ba1\u5212\u6ca1\u6709\u8868\u8fbe\u5f0f\u4e0a\u4e0b\u6587\uff0c\u56e0\u4e3a\u5b83\u4eec\u4ece\u4e0d\u8c03\u7528 ExecQual \u6216 ExecProject\uff0c\u4e5f\u4e0d\u9700\u8981\u5143\u7ec4\u69fd\u3002", "\u53ef\u5bf9 BitmapIndexScan \u5b50\u8282\u70b9\u4f5c\u7279\u6b8a\u5904\u7406\uff0c\u907f\u514d\u4e3a\u6bcf\u4e2a\u5b50\u8282\u70b9\u663e\u5f0f\u8c03\u7528 tbm_union\uff1a\u76f4\u63a5\u4e0b\u4f20\u5f53\u524d\u7ed3\u679c\u4f4d\u56fe\uff0c\u8ba9\u5b50\u8282\u70b9\u5c06\u7ed3\u679c\u6309\u4f4d OR \u5408\u5e76\u8fdb\u53bb\u3002", "ExecReScan \u4e0d\u77e5\u9053\u5f53\u524d\u8282\u70b9\u7684\u5b50\u8ba1\u5212\uff0c\u56e0\u6b64\u5fc5\u987b\u81ea\u884c\u901a\u77e5\u5b50\u8ba1\u5212\u54ea\u4e9b\u53c2\u6570\u53d1\u751f\u4e86\u53d8\u5316\u3002"]}, {"code": "case T_BitmapOr:\n\t\t\tpname = sname = \"BitmapOr\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "strategies": [], "description": ["\u5bf9\u5404\u5b50\u8ba1\u5212\u4ea7\u751f\u7684\u4f4d\u56fe\u6c42\u5e76\u96c6\u3002"], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/versions/15/description/0": "Unions bitmaps produced by its child plans.", "/versions/15/facts/0/label": "Core node tag", "/versions/15/facts/1/label": "Structured EXPLAIN Node Type", "/versions/15/facts/2/label": "Inputs", "/versions/15/facts/2/value": "Bitmap-producing child plans", "/versions/15/facts/3/label": "Output", "/versions/15/facts/3/value": "Tuple-location bitmap, not a tuple stream", "/versions/15/facts/4/label": "Executor initializer", "/versions/15/facts/5/label": "Memory mechanism", "/versions/15/tables/0/title": "EXPLAIN labels in this source build", "/versions/15/related/1/label": "Using EXPLAIN", "/versions/15/related/2/label": "Parallel plans", "/versions/15/sections/0/title": "EXPLAIN names and attributes", "/versions/15/sections/1/title": "Memory and temporary storage", "/versions/15/sections/2/title": "Parallel execution and instrumentation", "/versions/15/sections/3/title": "Same-version manual discussion", "/versions/15/sections/4/title": "Executor implementation notes", "/versions/15/sections/5/title": "EXPLAIN identity in core source", "/versions/15/memory/description": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/15/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/15/sections/0/paragraphs/1": "Text names recorded by this source: BitmapOr.", "/versions/15/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/15/sections/1/paragraphs/0": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/15/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/15/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/15/sections/3/paragraphs/0": "BitmapAnd and BitmapOr nodes always report their actual row counts as zero, due to implementation limitations.", "/versions/15/sections/4/paragraphs/0": "NOTES BitmapOr nodes don't make use of their left and right subtrees, rather they maintain a list of subplans, much like Append nodes. The logic is much simpler than Append, however, since we needn't cope with forward/backward execution.", "/versions/15/sections/4/paragraphs/1": "call ExecInitNode on each of the plans to be executed and save the results into the array \"bitmapplanstates\".", "/versions/15/sections/4/paragraphs/2": "BitmapOr plans don't have expression contexts because they never call ExecQual or ExecProject. They don't need any tuple slots either.", "/versions/15/sections/4/paragraphs/3": "We can special-case BitmapIndexScan children to avoid an explicit tbm_union step for each child: just pass down the current result bitmap and let the child OR directly into it.", "/versions/15/sections/4/paragraphs/4": "ExecReScan doesn't know about my subplans, so I have to do changed-parameter signaling myself.", "/versions/15/tables/0/columns/0/label": "Text-format label", "/versions/15/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "8ce3d26dca50c69d59a1a86c2f581c4d38cd6d5c5347e681888f51b1de04253a"}, "evidence_kind": "source and documentation", "explain_names": ["BitmapOr"], "partial_modes": [], "comparison_data": {"node_tag": "T_BitmapOr", "strategies": [], "text_names": ["BitmapOr"], "initializer": "ExecInitBitmapOr", "partial_modes": [], "memory_mechanism": "bitmap-lossification", "parallel_callbacks": []}, "comparison_hash": "c0ca503a6029c37ec720213dcdc3094997eb194d4920da68f94a7420d3e8f1d2", "explain_prefixes": ["Parallel", "Async"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeBitmapOr.c"}, "parallel_callbacks": []}, "16": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_BitmapOr"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "BitmapOr"}, {"label": "\u8f93\u5165", "value": "\u4ea7\u751f\u4f4d\u56fe\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\uff0c\u4e0d\u662f\u5143\u7ec4\u6d41"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitBitmapOr"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "bitmap-lossification"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/source/v16.15/postgresql-16.15.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "d29259efccb1b04f34599a20ae7ccb9970fc6fe2e19f39090b821b55399fbc41", "archive_sha256": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}, {"url": "https://ftp.postgresql.org/pub/source/v16.15/postgresql-16.15.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "d0a2549a532f65299aea5599ee1bedffe47101a07d0de21bec07068547ae237e", "archive_sha256": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}], "mechanism": "bitmap-lossification", "description": "\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "BitmapOr", "identity": "BitmapOr"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=16", "label": "EXPLAIN"}, {"url": "/docs/16/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/16/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/guc/work_mem/?v=16", "label": "work_mem"}], "release": {"ref": "PostgreSQL 16.15 source archive", "label": "16.15", "major": "16", "channel": "stable", "revision": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed", "source_url": "https://ftp.postgresql.org/pub/source/v16.15/postgresql-16.15.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v16.15/postgresql-16.15.tar.bz2", "line": 1244, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1244", "sha256": "8e017f0116dbea471339b40c37a667cc9f95039e7e0329c783e5e8ce194de7e1", "archive_sha256": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}, {"url": "https://ftp.postgresql.org/pub/source/v16.15/postgresql-16.15.tar.bz2", "line": 201, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:201", "sha256": "e48c08e555f8cb4e4bb43df516c4b8906ce9bc374b2a745d98a1fc8c22cc5099", "archive_sha256": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}, {"url": "https://ftp.postgresql.org/pub/source/v16.15/postgresql-16.15.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "d29259efccb1b04f34599a20ae7ccb9970fc6fe2e19f39090b821b55399fbc41", "archive_sha256": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}, {"url": "https://ftp.postgresql.org/pub/source/v16.15/postgresql-16.15.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "97db47353db76326b874589a5ad0a04501cc74cd72e237e7bd956e7472c41f1f", "archive_sha256": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}, {"url": "https://ftp.postgresql.org/pub/source/v16.15/postgresql-16.15.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "d0a2549a532f65299aea5599ee1bedffe47101a07d0de21bec07068547ae237e", "archive_sha256": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}, {"url": "https://pg.center/docs/16/using-explain.html#USING-EXPLAIN-CAVEATS", "path": "using-explain.html", "label": "PostgreSQL 16.15 \u00b7 using-explain", "sha256": "bd8b86e5281cf0e52ad6e0e4bb8b6ff6510dac61982b44f0c1dd07d54012db3c", "language": "en", "original_url": "/docs/16/using-explain.html#USING-EXPLAIN-CAVEATS"}], "node_tag": "T_BitmapOr", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aBitmapOr.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u540c\u7248\u672c\u624b\u518c\u8bf4\u660e", "paragraphs": ["\u7531\u4e8e\u5b9e\u73b0\u4e0a\u7684\u9650\u5236\uff0cBitmapAnd \u548c BitmapOr \u8282\u70b9\u62a5\u544a\u7684\u5b9e\u9645\u884c\u6570\u59cb\u7ec8\u4e3a\u96f6\u3002"]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["\u8bf4\u660e\uff1aBitmapOr \u4e0d\u4f7f\u7528\u5de6\u53f3\u5b50\u6811\uff0c\u800c\u50cf Append \u4e00\u6837\u7ef4\u62a4\u5b50\u8ba1\u5212\u5217\u8868\u3002\u4e0d\u8fc7\u5176\u903b\u8f91\u6bd4 Append \u7b80\u5355\u5f97\u591a\uff0c\u56e0\u4e3a\u65e0\u9700\u5904\u7406\u6b63\u5411\u6216\u53cd\u5411\u6267\u884c\u3002", "\u5bf9\u6bcf\u4e2a\u5f85\u6267\u884c\u8ba1\u5212\u8c03\u7528 ExecInitNode\uff0c\u5e76\u5c06\u7ed3\u679c\u4fdd\u5b58\u5230 bitmapplanstates \u6570\u7ec4\u3002", "BitmapOr \u8ba1\u5212\u6ca1\u6709\u8868\u8fbe\u5f0f\u4e0a\u4e0b\u6587\uff0c\u56e0\u4e3a\u5b83\u4eec\u4ece\u4e0d\u8c03\u7528 ExecQual \u6216 ExecProject\uff0c\u4e5f\u4e0d\u9700\u8981\u5143\u7ec4\u69fd\u3002", "\u53ef\u5bf9 BitmapIndexScan \u5b50\u8282\u70b9\u4f5c\u7279\u6b8a\u5904\u7406\uff0c\u907f\u514d\u4e3a\u6bcf\u4e2a\u5b50\u8282\u70b9\u663e\u5f0f\u8c03\u7528 tbm_union\uff1a\u76f4\u63a5\u4e0b\u4f20\u5f53\u524d\u7ed3\u679c\u4f4d\u56fe\uff0c\u8ba9\u5b50\u8282\u70b9\u5c06\u7ed3\u679c\u6309\u4f4d OR \u5408\u5e76\u8fdb\u53bb\u3002", "ExecReScan \u4e0d\u77e5\u9053\u5f53\u524d\u8282\u70b9\u7684\u5b50\u8ba1\u5212\uff0c\u56e0\u6b64\u5fc5\u987b\u81ea\u884c\u901a\u77e5\u5b50\u8ba1\u5212\u54ea\u4e9b\u53c2\u6570\u53d1\u751f\u4e86\u53d8\u5316\u3002"]}, {"code": "case T_BitmapOr:\n\t\t\tpname = sname = \"BitmapOr\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "strategies": [], "description": ["\u5bf9\u5404\u5b50\u8ba1\u5212\u4ea7\u751f\u7684\u4f4d\u56fe\u6c42\u5e76\u96c6\u3002"], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/versions/16/description/0": "Unions bitmaps produced by its child plans.", "/versions/16/facts/0/label": "Core node tag", "/versions/16/facts/1/label": "Structured EXPLAIN Node Type", "/versions/16/facts/2/label": "Inputs", "/versions/16/facts/2/value": "Bitmap-producing child plans", "/versions/16/facts/3/label": "Output", "/versions/16/facts/3/value": "Tuple-location bitmap, not a tuple stream", "/versions/16/facts/4/label": "Executor initializer", "/versions/16/facts/5/label": "Memory mechanism", "/versions/16/tables/0/title": "EXPLAIN labels in this source build", "/versions/16/related/1/label": "Using EXPLAIN", "/versions/16/related/2/label": "Parallel plans", "/versions/16/sections/0/title": "EXPLAIN names and attributes", "/versions/16/sections/1/title": "Memory and temporary storage", "/versions/16/sections/2/title": "Parallel execution and instrumentation", "/versions/16/sections/3/title": "Same-version manual discussion", "/versions/16/sections/4/title": "Executor implementation notes", "/versions/16/sections/5/title": "EXPLAIN identity in core source", "/versions/16/memory/description": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/16/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/16/sections/0/paragraphs/1": "Text names recorded by this source: BitmapOr.", "/versions/16/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/16/sections/1/paragraphs/0": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/16/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/16/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/16/sections/3/paragraphs/0": "BitmapAnd and BitmapOr nodes always report their actual row counts as zero, due to implementation limitations.", "/versions/16/sections/4/paragraphs/0": "NOTES BitmapOr nodes don't make use of their left and right subtrees, rather they maintain a list of subplans, much like Append nodes. The logic is much simpler than Append, however, since we needn't cope with forward/backward execution.", "/versions/16/sections/4/paragraphs/1": "call ExecInitNode on each of the plans to be executed and save the results into the array \"bitmapplanstates\".", "/versions/16/sections/4/paragraphs/2": "BitmapOr plans don't have expression contexts because they never call ExecQual or ExecProject. They don't need any tuple slots either.", "/versions/16/sections/4/paragraphs/3": "We can special-case BitmapIndexScan children to avoid an explicit tbm_union step for each child: just pass down the current result bitmap and let the child OR directly into it.", "/versions/16/sections/4/paragraphs/4": "ExecReScan doesn't know about my subplans, so I have to do changed-parameter signaling myself.", "/versions/16/tables/0/columns/0/label": "Text-format label", "/versions/16/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "e611663c8833de86047b2912f9a0945895b2c912476eae0d751d265cbafcda11"}, "evidence_kind": "source and documentation", "explain_names": ["BitmapOr"], "partial_modes": [], "comparison_data": {"node_tag": "T_BitmapOr", "strategies": [], "text_names": ["BitmapOr"], "initializer": "ExecInitBitmapOr", "partial_modes": [], "memory_mechanism": "bitmap-lossification", "parallel_callbacks": []}, "comparison_hash": "c0ca503a6029c37ec720213dcdc3094997eb194d4920da68f94a7420d3e8f1d2", "explain_prefixes": ["Parallel", "Async"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeBitmapOr.c"}, "parallel_callbacks": []}, "17": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_BitmapOr"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "BitmapOr"}, {"label": "\u8f93\u5165", "value": "\u4ea7\u751f\u4f4d\u56fe\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\uff0c\u4e0d\u662f\u5143\u7ec4\u6d41"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitBitmapOr"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "bitmap-lossification"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/source/v17.11/postgresql-17.11.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "dbf4227a43dd8570fd4ff6fc12312a0e7e96f1e9f79b35b46204fbe01d483188", "archive_sha256": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}, {"url": "https://ftp.postgresql.org/pub/source/v17.11/postgresql-17.11.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "10f9875b7384fddcd0750b41f7357933769a840c57a7bc0e29eecd4cdc5b8f4c", "archive_sha256": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}], "mechanism": "bitmap-lossification", "description": "\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "BitmapOr", "identity": "BitmapOr"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=17", "label": "EXPLAIN"}, {"url": "/docs/17/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/17/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/guc/work_mem/?v=17", "label": "work_mem"}], "release": {"ref": "PostgreSQL 17.11 source archive", "label": "17.11", "major": "17", "channel": "stable", "revision": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979", "source_url": "https://ftp.postgresql.org/pub/source/v17.11/postgresql-17.11.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v17.11/postgresql-17.11.tar.bz2", "line": 1433, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1433", "sha256": "741251b1a3b6d269a52a673d42eb63b02e13a5872db7b359b137086ab21b63c8", "archive_sha256": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}, {"url": "https://ftp.postgresql.org/pub/source/v17.11/postgresql-17.11.tar.bz2", "line": 201, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:201", "sha256": "a77576e158b94cb01fa8c5174ba133004eabdd727660323f8afc66c8d2e757b8", "archive_sha256": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}, {"url": "https://ftp.postgresql.org/pub/source/v17.11/postgresql-17.11.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "dbf4227a43dd8570fd4ff6fc12312a0e7e96f1e9f79b35b46204fbe01d483188", "archive_sha256": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}, {"url": "https://ftp.postgresql.org/pub/source/v17.11/postgresql-17.11.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "d390dd69e2d3f5085beb42b33e46ff0676a2959b916a12b82118a7e545f8e562", "archive_sha256": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}, {"url": "https://ftp.postgresql.org/pub/source/v17.11/postgresql-17.11.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "10f9875b7384fddcd0750b41f7357933769a840c57a7bc0e29eecd4cdc5b8f4c", "archive_sha256": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}, {"url": "https://pg.center/docs/17/using-explain.html#USING-EXPLAIN-CAVEATS", "path": "using-explain.html", "label": "PostgreSQL 17.11 \u00b7 using-explain", "sha256": "8e3422c77496cc53bfc225ccadda3e82eb23c8c362b8eb95e7fb02cdb315ea78", "language": "en", "original_url": "/docs/17/using-explain.html#USING-EXPLAIN-CAVEATS"}], "node_tag": "T_BitmapOr", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aBitmapOr.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u540c\u7248\u672c\u624b\u518c\u8bf4\u660e", "paragraphs": ["\u7531\u4e8e\u5b9e\u73b0\u4e0a\u7684\u9650\u5236\uff0cBitmapAnd \u548c BitmapOr \u8282\u70b9\u62a5\u544a\u7684\u5b9e\u9645\u884c\u6570\u59cb\u7ec8\u4e3a\u96f6\u3002"]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["\u8bf4\u660e\uff1aBitmapOr \u4e0d\u4f7f\u7528\u5de6\u53f3\u5b50\u6811\uff0c\u800c\u50cf Append \u4e00\u6837\u7ef4\u62a4\u5b50\u8ba1\u5212\u5217\u8868\u3002\u4e0d\u8fc7\u5176\u903b\u8f91\u6bd4 Append \u7b80\u5355\u5f97\u591a\uff0c\u56e0\u4e3a\u65e0\u9700\u5904\u7406\u6b63\u5411\u6216\u53cd\u5411\u6267\u884c\u3002", "\u5bf9\u6bcf\u4e2a\u5f85\u6267\u884c\u8ba1\u5212\u8c03\u7528 ExecInitNode\uff0c\u5e76\u5c06\u7ed3\u679c\u4fdd\u5b58\u5230 bitmapplanstates \u6570\u7ec4\u3002", "BitmapOr \u8ba1\u5212\u6ca1\u6709\u8868\u8fbe\u5f0f\u4e0a\u4e0b\u6587\uff0c\u56e0\u4e3a\u5b83\u4eec\u4ece\u4e0d\u8c03\u7528 ExecQual \u6216 ExecProject\uff0c\u4e5f\u4e0d\u9700\u8981\u5143\u7ec4\u69fd\u3002", "\u53ef\u5bf9 BitmapIndexScan \u5b50\u8282\u70b9\u4f5c\u7279\u6b8a\u5904\u7406\uff0c\u907f\u514d\u4e3a\u6bcf\u4e2a\u5b50\u8282\u70b9\u663e\u5f0f\u8c03\u7528 tbm_union\uff1a\u76f4\u63a5\u4e0b\u4f20\u5f53\u524d\u7ed3\u679c\u4f4d\u56fe\uff0c\u8ba9\u5b50\u8282\u70b9\u5c06\u7ed3\u679c\u6309\u4f4d OR \u5408\u5e76\u8fdb\u53bb\u3002", "ExecReScan \u4e0d\u77e5\u9053\u5f53\u524d\u8282\u70b9\u7684\u5b50\u8ba1\u5212\uff0c\u56e0\u6b64\u5fc5\u987b\u81ea\u884c\u901a\u77e5\u5b50\u8ba1\u5212\u54ea\u4e9b\u53c2\u6570\u53d1\u751f\u4e86\u53d8\u5316\u3002"]}, {"code": "case T_BitmapOr:\n\t\t\tpname = sname = \"BitmapOr\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "strategies": [], "description": ["\u5bf9\u5404\u5b50\u8ba1\u5212\u4ea7\u751f\u7684\u4f4d\u56fe\u6c42\u5e76\u96c6\u3002"], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/versions/17/description/0": "Unions bitmaps produced by its child plans.", "/versions/17/facts/0/label": "Core node tag", "/versions/17/facts/1/label": "Structured EXPLAIN Node Type", "/versions/17/facts/2/label": "Inputs", "/versions/17/facts/2/value": "Bitmap-producing child plans", "/versions/17/facts/3/label": "Output", "/versions/17/facts/3/value": "Tuple-location bitmap, not a tuple stream", "/versions/17/facts/4/label": "Executor initializer", "/versions/17/facts/5/label": "Memory mechanism", "/versions/17/tables/0/title": "EXPLAIN labels in this source build", "/versions/17/related/1/label": "Using EXPLAIN", "/versions/17/related/2/label": "Parallel plans", "/versions/17/sections/0/title": "EXPLAIN names and attributes", "/versions/17/sections/1/title": "Memory and temporary storage", "/versions/17/sections/2/title": "Parallel execution and instrumentation", "/versions/17/sections/3/title": "Same-version manual discussion", "/versions/17/sections/4/title": "Executor implementation notes", "/versions/17/sections/5/title": "EXPLAIN identity in core source", "/versions/17/memory/description": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/17/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/17/sections/0/paragraphs/1": "Text names recorded by this source: BitmapOr.", "/versions/17/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/17/sections/1/paragraphs/0": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/17/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/17/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/17/sections/3/paragraphs/0": "BitmapAnd and BitmapOr nodes always report their actual row counts as zero, due to implementation limitations.", "/versions/17/sections/4/paragraphs/0": "NOTES BitmapOr nodes don't make use of their left and right subtrees, rather they maintain a list of subplans, much like Append nodes. The logic is much simpler than Append, however, since we needn't cope with forward/backward execution.", "/versions/17/sections/4/paragraphs/1": "call ExecInitNode on each of the plans to be executed and save the results into the array \"bitmapplanstates\".", "/versions/17/sections/4/paragraphs/2": "BitmapOr plans don't have expression contexts because they never call ExecQual or ExecProject. They don't need any tuple slots either.", "/versions/17/sections/4/paragraphs/3": "We can special-case BitmapIndexScan children to avoid an explicit tbm_union step for each child: just pass down the current result bitmap and let the child OR directly into it.", "/versions/17/sections/4/paragraphs/4": "ExecReScan doesn't know about my subplans, so I have to do changed-parameter signaling myself.", "/versions/17/tables/0/columns/0/label": "Text-format label", "/versions/17/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "3c6a5f9570908e97f551a4c854a25536827db55ad6c8ba9330da8d6a39248d92"}, "evidence_kind": "source and documentation", "explain_names": ["BitmapOr"], "partial_modes": [], "comparison_data": {"node_tag": "T_BitmapOr", "strategies": [], "text_names": ["BitmapOr"], "initializer": "ExecInitBitmapOr", "partial_modes": [], "memory_mechanism": "bitmap-lossification", "parallel_callbacks": []}, "comparison_hash": "c0ca503a6029c37ec720213dcdc3094997eb194d4920da68f94a7420d3e8f1d2", "explain_prefixes": ["Parallel", "Async"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeBitmapOr.c"}, "parallel_callbacks": []}, "18": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_BitmapOr"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "BitmapOr"}, {"label": "\u8f93\u5165", "value": "\u4ea7\u751f\u4f4d\u56fe\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\uff0c\u4e0d\u662f\u5143\u7ec4\u6d41"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitBitmapOr"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "bitmap-lossification"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "81e2aeb0cc0d4cece84b7514385636cd11ea0e1faab93c721d4c3b86c20c9104", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, {"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "e2453b7155d55db8c3a59bc929362f01d3f9692b0a483e5aa81a7b6c50db6102", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}], "mechanism": "bitmap-lossification", "description": "\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "BitmapOr", "identity": "BitmapOr"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=18", "label": "EXPLAIN"}, {"url": "/docs/18/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/18/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/guc/work_mem/?v=18", "label": "work_mem"}], "release": {"ref": "PostgreSQL 18.6 source archive", "label": "18.6", "major": "18", "channel": "stable", "revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f", "source_url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "line": 1418, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1418", "sha256": "34c86d6070224a0e981efef51f79101d6d505e5874f1684ace183034bab14bb4", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, {"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "line": 201, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:201", "sha256": "f8a06a3f539077249b20664b2812433db6d7bd12b2c0ca633525db43d06f112a", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, {"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "81e2aeb0cc0d4cece84b7514385636cd11ea0e1faab93c721d4c3b86c20c9104", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, {"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "52422b327a8049fbbb20d8b96008a0fc0a6fafa60f7eff3c695d5b2e83830120", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, {"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "e2453b7155d55db8c3a59bc929362f01d3f9692b0a483e5aa81a7b6c50db6102", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, {"url": "https://pg.center/docs/18/using-explain.html#USING-EXPLAIN-CAVEATS", "path": "using-explain.html", "label": "PostgreSQL 18.6 \u00b7 using-explain", "sha256": "60040c30180093418a0affe56dd27dff9df2504b705b38039589e458bf5c31ed", "language": "en", "original_url": "/docs/18/using-explain.html#USING-EXPLAIN-CAVEATS"}], "node_tag": "T_BitmapOr", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aBitmapOr.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u540c\u7248\u672c\u624b\u518c\u8bf4\u660e", "paragraphs": ["\u7531\u4e8e\u5b9e\u73b0\u4e0a\u7684\u9650\u5236\uff0cBitmapAnd \u548c BitmapOr \u8282\u70b9\u62a5\u544a\u7684\u5b9e\u9645\u884c\u6570\u59cb\u7ec8\u4e3a\u96f6\u3002"]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["\u8bf4\u660e\uff1aBitmapOr \u4e0d\u4f7f\u7528\u5de6\u53f3\u5b50\u6811\uff0c\u800c\u50cf Append \u4e00\u6837\u7ef4\u62a4\u5b50\u8ba1\u5212\u5217\u8868\u3002\u4e0d\u8fc7\u5176\u903b\u8f91\u6bd4 Append \u7b80\u5355\u5f97\u591a\uff0c\u56e0\u4e3a\u65e0\u9700\u5904\u7406\u6b63\u5411\u6216\u53cd\u5411\u6267\u884c\u3002", "\u5bf9\u6bcf\u4e2a\u5f85\u6267\u884c\u8ba1\u5212\u8c03\u7528 ExecInitNode\uff0c\u5e76\u5c06\u7ed3\u679c\u4fdd\u5b58\u5230 bitmapplanstates \u6570\u7ec4\u3002", "BitmapOr \u8ba1\u5212\u6ca1\u6709\u8868\u8fbe\u5f0f\u4e0a\u4e0b\u6587\uff0c\u56e0\u4e3a\u5b83\u4eec\u4ece\u4e0d\u8c03\u7528 ExecQual \u6216 ExecProject\uff0c\u4e5f\u4e0d\u9700\u8981\u5143\u7ec4\u69fd\u3002", "\u53ef\u5bf9 BitmapIndexScan \u5b50\u8282\u70b9\u4f5c\u7279\u6b8a\u5904\u7406\uff0c\u907f\u514d\u4e3a\u6bcf\u4e2a\u5b50\u8282\u70b9\u663e\u5f0f\u8c03\u7528 tbm_union\uff1a\u76f4\u63a5\u4e0b\u4f20\u5f53\u524d\u7ed3\u679c\u4f4d\u56fe\uff0c\u8ba9\u5b50\u8282\u70b9\u5c06\u7ed3\u679c\u6309\u4f4d OR \u5408\u5e76\u8fdb\u53bb\u3002", "ExecReScan \u4e0d\u77e5\u9053\u5f53\u524d\u8282\u70b9\u7684\u5b50\u8ba1\u5212\uff0c\u56e0\u6b64\u5fc5\u987b\u81ea\u884c\u901a\u77e5\u5b50\u8ba1\u5212\u54ea\u4e9b\u53c2\u6570\u53d1\u751f\u4e86\u53d8\u5316\u3002"]}, {"code": "case T_BitmapOr:\n\t\t\tpname = sname = \"BitmapOr\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "strategies": [], "description": ["\u5bf9\u5404\u5b50\u8ba1\u5212\u4ea7\u751f\u7684\u4f4d\u56fe\u6c42\u5e76\u96c6\u3002"], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/versions/18/description/0": "Unions bitmaps produced by its child plans.", "/versions/18/facts/0/label": "Core node tag", "/versions/18/facts/1/label": "Structured EXPLAIN Node Type", "/versions/18/facts/2/label": "Inputs", "/versions/18/facts/2/value": "Bitmap-producing child plans", "/versions/18/facts/3/label": "Output", "/versions/18/facts/3/value": "Tuple-location bitmap, not a tuple stream", "/versions/18/facts/4/label": "Executor initializer", "/versions/18/facts/5/label": "Memory mechanism", "/versions/18/tables/0/title": "EXPLAIN labels in this source build", "/versions/18/related/1/label": "Using EXPLAIN", "/versions/18/related/2/label": "Parallel plans", "/versions/18/sections/0/title": "EXPLAIN names and attributes", "/versions/18/sections/1/title": "Memory and temporary storage", "/versions/18/sections/2/title": "Parallel execution and instrumentation", "/versions/18/sections/3/title": "Same-version manual discussion", "/versions/18/sections/4/title": "Executor implementation notes", "/versions/18/sections/5/title": "EXPLAIN identity in core source", "/versions/18/memory/description": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/18/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/18/sections/0/paragraphs/1": "Text names recorded by this source: BitmapOr.", "/versions/18/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/18/sections/1/paragraphs/0": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/18/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/18/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/18/sections/3/paragraphs/0": "BitmapAnd and BitmapOr nodes always report their actual row counts as zero, due to implementation limitations.", "/versions/18/sections/4/paragraphs/0": "NOTES BitmapOr nodes don't make use of their left and right subtrees, rather they maintain a list of subplans, much like Append nodes. The logic is much simpler than Append, however, since we needn't cope with forward/backward execution.", "/versions/18/sections/4/paragraphs/1": "call ExecInitNode on each of the plans to be executed and save the results into the array \"bitmapplanstates\".", "/versions/18/sections/4/paragraphs/2": "BitmapOr plans don't have expression contexts because they never call ExecQual or ExecProject. They don't need any tuple slots either.", "/versions/18/sections/4/paragraphs/3": "We can special-case BitmapIndexScan children to avoid an explicit tbm_union step for each child: just pass down the current result bitmap and let the child OR directly into it.", "/versions/18/sections/4/paragraphs/4": "ExecReScan doesn't know about my subplans, so I have to do changed-parameter signaling myself.", "/versions/18/tables/0/columns/0/label": "Text-format label", "/versions/18/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "6555fae880f7d80cecb472ac63d57e5c11bc60d158b34b99d1d8c4be9c3c8829"}, "evidence_kind": "source and documentation", "explain_names": ["BitmapOr"], "partial_modes": [], "comparison_data": {"node_tag": "T_BitmapOr", "strategies": [], "text_names": ["BitmapOr"], "initializer": "ExecInitBitmapOr", "partial_modes": [], "memory_mechanism": "bitmap-lossification", "parallel_callbacks": []}, "comparison_hash": "c0ca503a6029c37ec720213dcdc3094997eb194d4920da68f94a7420d3e8f1d2", "explain_prefixes": ["Parallel", "Async"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeBitmapOr.c"}, "parallel_callbacks": []}, "19": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_BitmapOr"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "BitmapOr"}, {"label": "\u8f93\u5165", "value": "\u4ea7\u751f\u4f4d\u56fe\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\uff0c\u4e0d\u662f\u5143\u7ec4\u6d41"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitBitmapOr"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "bitmap-lossification"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/source/v19beta4/postgresql-19beta4.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "14f9eed6e8f71de94c064f7265c0724022326d6acf2ab4d2da6d17ccbd206188", "archive_sha256": "83157ee9c599d03b2f7a3d73ef3a56ec24e0e79cc2b3501a64d1364f56398c86"}, {"url": "https://ftp.postgresql.org/pub/source/v19beta4/postgresql-19beta4.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "3394cc4f8c9e397b78f6b0d99fba931fd809450ec7b5ff051798ecbd0dcf3b32", "archive_sha256": "83157ee9c599d03b2f7a3d73ef3a56ec24e0e79cc2b3501a64d1364f56398c86"}], "mechanism": "bitmap-lossification", "description": "\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "BitmapOr", "identity": "BitmapOr"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=19", "label": "EXPLAIN"}, {"url": "/docs/19/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/19/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/guc/work_mem/?v=19", "label": "work_mem"}], "release": {"ref": "PostgreSQL 19beta4 source archive", "label": "19beta4", "major": "19", "channel": "preview", "revision": "83157ee9c599d03b2f7a3d73ef3a56ec24e0e79cc2b3501a64d1364f56398c86", "source_url": "https://ftp.postgresql.org/pub/source/v19beta4/postgresql-19beta4.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v19beta4/postgresql-19beta4.tar.bz2", "line": 1430, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1430", "sha256": "8b115b1c194a4b54ae630209a741e293b1df49a9052f10b2de9ca092a48998e3", "archive_sha256": "83157ee9c599d03b2f7a3d73ef3a56ec24e0e79cc2b3501a64d1364f56398c86"}, {"url": "https://ftp.postgresql.org/pub/source/v19beta4/postgresql-19beta4.tar.bz2", "line": 201, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:201", "sha256": "5e39b2037bed672da55104229ecc32da5abde44c26bcad01479edcfa044d09ed", "archive_sha256": "83157ee9c599d03b2f7a3d73ef3a56ec24e0e79cc2b3501a64d1364f56398c86"}, {"url": "https://ftp.postgresql.org/pub/source/v19beta4/postgresql-19beta4.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "14f9eed6e8f71de94c064f7265c0724022326d6acf2ab4d2da6d17ccbd206188", "archive_sha256": "83157ee9c599d03b2f7a3d73ef3a56ec24e0e79cc2b3501a64d1364f56398c86"}, {"url": "https://ftp.postgresql.org/pub/source/v19beta4/postgresql-19beta4.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "1c65d5d6b6c81c71531685843647869bcae630779d815a5036b06e070c6c06c7", "archive_sha256": "83157ee9c599d03b2f7a3d73ef3a56ec24e0e79cc2b3501a64d1364f56398c86"}, {"url": "https://ftp.postgresql.org/pub/source/v19beta4/postgresql-19beta4.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "3394cc4f8c9e397b78f6b0d99fba931fd809450ec7b5ff051798ecbd0dcf3b32", "archive_sha256": "83157ee9c599d03b2f7a3d73ef3a56ec24e0e79cc2b3501a64d1364f56398c86"}, {"url": "https://pg.center/docs/19/using-explain.html#USING-EXPLAIN-CAVEATS", "path": "using-explain.html", "label": "PostgreSQL 19beta4 \u00b7 using-explain", "sha256": "52f111fbd213e2200146319d01a9dcc2ea90001617d2a28edc52f7954c2dd70b", "language": "en", "original_url": "/docs/19/using-explain.html#USING-EXPLAIN-CAVEATS"}], "node_tag": "T_BitmapOr", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aBitmapOr.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u540c\u7248\u672c\u624b\u518c\u8bf4\u660e", "paragraphs": ["\u7531\u4e8e\u5b9e\u73b0\u4e0a\u7684\u9650\u5236\uff0cBitmapAnd \u548c BitmapOr \u8282\u70b9\u62a5\u544a\u7684\u5b9e\u9645\u884c\u6570\u59cb\u7ec8\u4e3a\u96f6\u3002"]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["\u8bf4\u660e\uff1aBitmapOr \u4e0d\u4f7f\u7528\u5de6\u53f3\u5b50\u6811\uff0c\u800c\u50cf Append \u4e00\u6837\u7ef4\u62a4\u5b50\u8ba1\u5212\u5217\u8868\u3002\u4e0d\u8fc7\u5176\u903b\u8f91\u6bd4 Append \u7b80\u5355\u5f97\u591a\uff0c\u56e0\u4e3a\u65e0\u9700\u5904\u7406\u6b63\u5411\u6216\u53cd\u5411\u6267\u884c\u3002", "\u5bf9\u6bcf\u4e2a\u5f85\u6267\u884c\u8ba1\u5212\u8c03\u7528 ExecInitNode\uff0c\u5e76\u5c06\u7ed3\u679c\u4fdd\u5b58\u5230 bitmapplanstates \u6570\u7ec4\u3002", "BitmapOr \u8ba1\u5212\u6ca1\u6709\u8868\u8fbe\u5f0f\u4e0a\u4e0b\u6587\uff0c\u56e0\u4e3a\u5b83\u4eec\u4ece\u4e0d\u8c03\u7528 ExecQual \u6216 ExecProject\uff0c\u4e5f\u4e0d\u9700\u8981\u5143\u7ec4\u69fd\u3002", "\u53ef\u5bf9 BitmapIndexScan \u5b50\u8282\u70b9\u4f5c\u7279\u6b8a\u5904\u7406\uff0c\u907f\u514d\u4e3a\u6bcf\u4e2a\u5b50\u8282\u70b9\u663e\u5f0f\u8c03\u7528 tbm_union\uff1a\u76f4\u63a5\u4e0b\u4f20\u5f53\u524d\u7ed3\u679c\u4f4d\u56fe\uff0c\u8ba9\u5b50\u8282\u70b9\u5c06\u7ed3\u679c\u6309\u4f4d OR \u5408\u5e76\u8fdb\u53bb\u3002", "ExecReScan \u4e0d\u77e5\u9053\u5f53\u524d\u8282\u70b9\u7684\u5b50\u8ba1\u5212\uff0c\u56e0\u6b64\u5fc5\u987b\u81ea\u884c\u901a\u77e5\u5b50\u8ba1\u5212\u54ea\u4e9b\u53c2\u6570\u53d1\u751f\u4e86\u53d8\u5316\u3002"]}, {"code": "case T_BitmapOr:\n\t\t\tpname = sname = \"BitmapOr\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "strategies": [], "description": ["\u5bf9\u5404\u5b50\u8ba1\u5212\u4ea7\u751f\u7684\u4f4d\u56fe\u6c42\u5e76\u96c6\u3002"], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/versions/19/description/0": "Unions bitmaps produced by its child plans.", "/versions/19/facts/0/label": "Core node tag", "/versions/19/facts/1/label": "Structured EXPLAIN Node Type", "/versions/19/facts/2/label": "Inputs", "/versions/19/facts/2/value": "Bitmap-producing child plans", "/versions/19/facts/3/label": "Output", "/versions/19/facts/3/value": "Tuple-location bitmap, not a tuple stream", "/versions/19/facts/4/label": "Executor initializer", "/versions/19/facts/5/label": "Memory mechanism", "/versions/19/tables/0/title": "EXPLAIN labels in this source build", "/versions/19/related/1/label": "Using EXPLAIN", "/versions/19/related/2/label": "Parallel plans", "/versions/19/sections/0/title": "EXPLAIN names and attributes", "/versions/19/sections/1/title": "Memory and temporary storage", "/versions/19/sections/2/title": "Parallel execution and instrumentation", "/versions/19/sections/3/title": "Same-version manual discussion", "/versions/19/sections/4/title": "Executor implementation notes", "/versions/19/sections/5/title": "EXPLAIN identity in core source", "/versions/19/memory/description": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/19/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/19/sections/0/paragraphs/1": "Text names recorded by this source: BitmapOr.", "/versions/19/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/19/sections/1/paragraphs/0": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/19/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/19/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/19/sections/3/paragraphs/0": "BitmapAnd and BitmapOr nodes always report their actual row counts as zero, due to implementation limitations.", "/versions/19/sections/4/paragraphs/0": "NOTES BitmapOr nodes don't make use of their left and right subtrees, rather they maintain a list of subplans, much like Append nodes. The logic is much simpler than Append, however, since we needn't cope with forward/backward execution.", "/versions/19/sections/4/paragraphs/1": "call ExecInitNode on each of the plans to be executed and save the results into the array \"bitmapplanstates\".", "/versions/19/sections/4/paragraphs/2": "BitmapOr plans don't have expression contexts because they never call ExecQual or ExecProject. They don't need any tuple slots either.", "/versions/19/sections/4/paragraphs/3": "We can special-case BitmapIndexScan children to avoid an explicit tbm_union step for each child: just pass down the current result bitmap and let the child OR directly into it.", "/versions/19/sections/4/paragraphs/4": "ExecReScan doesn't know about my subplans, so I have to do changed-parameter signaling myself.", "/versions/19/tables/0/columns/0/label": "Text-format label", "/versions/19/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "45f6044deb0018ef45cefd36063994778b5f09c3f2961c5b86c163860a85f222"}, "evidence_kind": "source and documentation", "explain_names": ["BitmapOr"], "partial_modes": [], "comparison_data": {"node_tag": "T_BitmapOr", "strategies": [], "text_names": ["BitmapOr"], "initializer": "ExecInitBitmapOr", "partial_modes": [], "memory_mechanism": "bitmap-lossification", "parallel_callbacks": []}, "comparison_hash": "c0ca503a6029c37ec720213dcdc3094997eb194d4920da68f94a7420d3e8f1d2", "explain_prefixes": ["Parallel", "Async"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeBitmapOr.c"}, "parallel_callbacks": []}, "20": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_BitmapOr"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "BitmapOr"}, {"label": "\u8f93\u5165", "value": "\u4ea7\u751f\u4f4d\u56fe\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\uff0c\u4e0d\u662f\u5143\u7ec4\u6d41"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitBitmapOr"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "bitmap-lossification"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "4534aeb178af033afae2e3fbccd9318785fb6869e553e697b0bf73e1fe5b3798", "archive_sha256": "4d3346909b201ac1648232cf290462a7070c119326f56196f1f0253ed80fae41"}, {"url": "https://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "3394cc4f8c9e397b78f6b0d99fba931fd809450ec7b5ff051798ecbd0dcf3b32", "archive_sha256": "4d3346909b201ac1648232cf290462a7070c119326f56196f1f0253ed80fae41"}], "mechanism": "bitmap-lossification", "description": "\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "BitmapOr", "identity": "BitmapOr"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=20", "label": "EXPLAIN"}, {"url": "/docs/devel/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/devel/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/guc/work_mem/?v=20", "label": "work_mem"}], "release": {"ref": "PostgreSQL 20devel source archive", "label": "20devel", "major": "20", "channel": "devel", "revision": "4d3346909b201ac1648232cf290462a7070c119326f56196f1f0253ed80fae41", "source_url": "https://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.bz2", "source_snapshot_utc": "26-Sep-2026 20:22"}, "sources": [{"url": "https://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.bz2", "line": 1430, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1430", "sha256": "13402758013520451539427b5993db06d463ca11c4e2d4cc5444e82367688077", "archive_sha256": "4d3346909b201ac1648232cf290462a7070c119326f56196f1f0253ed80fae41"}, {"url": "https://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.bz2", "line": 201, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:201", "sha256": "5e39b2037bed672da55104229ecc32da5abde44c26bcad01479edcfa044d09ed", "archive_sha256": "4d3346909b201ac1648232cf290462a7070c119326f56196f1f0253ed80fae41"}, {"url": "https://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "4534aeb178af033afae2e3fbccd9318785fb6869e553e697b0bf73e1fe5b3798", "archive_sha256": "4d3346909b201ac1648232cf290462a7070c119326f56196f1f0253ed80fae41"}, {"url": "https://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "7a94ed1652f0d74d50c39971d1cd3e8051dbc0d6058f31b6de71a433ca343521", "archive_sha256": "4d3346909b201ac1648232cf290462a7070c119326f56196f1f0253ed80fae41"}, {"url": "https://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "3394cc4f8c9e397b78f6b0d99fba931fd809450ec7b5ff051798ecbd0dcf3b32", "archive_sha256": "4d3346909b201ac1648232cf290462a7070c119326f56196f1f0253ed80fae41"}, {"url": "https://pg.center/docs/devel/using-explain.html#USING-EXPLAIN-CAVEATS", "path": "using-explain.html", "label": "PostgreSQL 20devel \u00b7 using-explain", "sha256": "99cfea3035876ea63f88b75ba8c964b51a32a70606544e09f769c0b60a234b31", "language": "en", "original_url": "/docs/devel/using-explain.html#USING-EXPLAIN-CAVEATS"}], "node_tag": "T_BitmapOr", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aBitmapOr.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u540c\u7248\u672c\u624b\u518c\u8bf4\u660e", "paragraphs": ["\u7531\u4e8e\u5b9e\u73b0\u4e0a\u7684\u9650\u5236\uff0cBitmapAnd \u548c BitmapOr \u8282\u70b9\u62a5\u544a\u7684\u5b9e\u9645\u884c\u6570\u59cb\u7ec8\u4e3a\u96f6\u3002"]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["\u8bf4\u660e\uff1aBitmapOr \u4e0d\u4f7f\u7528\u5de6\u53f3\u5b50\u6811\uff0c\u800c\u50cf Append \u4e00\u6837\u7ef4\u62a4\u5b50\u8ba1\u5212\u5217\u8868\u3002\u4e0d\u8fc7\u5176\u903b\u8f91\u6bd4 Append \u7b80\u5355\u5f97\u591a\uff0c\u56e0\u4e3a\u65e0\u9700\u5904\u7406\u6b63\u5411\u6216\u53cd\u5411\u6267\u884c\u3002", "\u5bf9\u6bcf\u4e2a\u5f85\u6267\u884c\u8ba1\u5212\u8c03\u7528 ExecInitNode\uff0c\u5e76\u5c06\u7ed3\u679c\u4fdd\u5b58\u5230 bitmapplanstates \u6570\u7ec4\u3002", "BitmapOr \u8ba1\u5212\u6ca1\u6709\u8868\u8fbe\u5f0f\u4e0a\u4e0b\u6587\uff0c\u56e0\u4e3a\u5b83\u4eec\u4ece\u4e0d\u8c03\u7528 ExecQual \u6216 ExecProject\uff0c\u4e5f\u4e0d\u9700\u8981\u5143\u7ec4\u69fd\u3002", "\u53ef\u5bf9 BitmapIndexScan \u5b50\u8282\u70b9\u4f5c\u7279\u6b8a\u5904\u7406\uff0c\u907f\u514d\u4e3a\u6bcf\u4e2a\u5b50\u8282\u70b9\u663e\u5f0f\u8c03\u7528 tbm_union\uff1a\u76f4\u63a5\u4e0b\u4f20\u5f53\u524d\u7ed3\u679c\u4f4d\u56fe\uff0c\u8ba9\u5b50\u8282\u70b9\u5c06\u7ed3\u679c\u6309\u4f4d OR \u5408\u5e76\u8fdb\u53bb\u3002", "ExecReScan \u4e0d\u77e5\u9053\u5f53\u524d\u8282\u70b9\u7684\u5b50\u8ba1\u5212\uff0c\u56e0\u6b64\u5fc5\u987b\u81ea\u884c\u901a\u77e5\u5b50\u8ba1\u5212\u54ea\u4e9b\u53c2\u6570\u53d1\u751f\u4e86\u53d8\u5316\u3002"]}, {"code": "case T_BitmapOr:\n\t\t\tpname = sname = \"BitmapOr\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "strategies": [], "description": ["\u5bf9\u5404\u5b50\u8ba1\u5212\u4ea7\u751f\u7684\u4f4d\u56fe\u6c42\u5e76\u96c6\u3002"], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/summary": "Unions bitmaps produced by its child plans.", "/category": "Bitmap", "/versions/20/description/0": "Unions bitmaps produced by its child plans.", "/versions/20/facts/0/label": "Core node tag", "/versions/20/facts/1/label": "Structured EXPLAIN Node Type", "/versions/20/facts/2/label": "Inputs", "/versions/20/facts/2/value": "Bitmap-producing child plans", "/versions/20/facts/3/label": "Output", "/versions/20/facts/3/value": "Tuple-location bitmap, not a tuple stream", "/versions/20/facts/4/label": "Executor initializer", "/versions/20/facts/5/label": "Memory mechanism", "/versions/20/tables/0/title": "EXPLAIN labels in this source build", "/versions/20/related/1/label": "Using EXPLAIN", "/versions/20/related/2/label": "Parallel plans", "/versions/20/sections/0/title": "EXPLAIN names and attributes", "/versions/20/sections/1/title": "Memory and temporary storage", "/versions/20/sections/2/title": "Parallel execution and instrumentation", "/versions/20/sections/3/title": "Same-version manual discussion", "/versions/20/sections/4/title": "Executor implementation notes", "/versions/20/sections/5/title": "EXPLAIN identity in core source", "/versions/20/memory/description": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/20/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/20/sections/0/paragraphs/1": "Text names recorded by this source: BitmapOr.", "/versions/20/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/20/sections/1/paragraphs/0": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/20/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/20/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/20/sections/3/paragraphs/0": "BitmapAnd and BitmapOr nodes always report their actual row counts as zero, due to implementation limitations.", "/versions/20/sections/4/paragraphs/0": "NOTES BitmapOr nodes don't make use of their left and right subtrees, rather they maintain a list of subplans, much like Append nodes. The logic is much simpler than Append, however, since we needn't cope with forward/backward execution.", "/versions/20/sections/4/paragraphs/1": "call ExecInitNode on each of the plans to be executed and save the results into the array \"bitmapplanstates\".", "/versions/20/sections/4/paragraphs/2": "BitmapOr plans don't have expression contexts because they never call ExecQual or ExecProject. They don't need any tuple slots either.", "/versions/20/sections/4/paragraphs/3": "We can special-case BitmapIndexScan children to avoid an explicit tbm_union step for each child: just pass down the current result bitmap and let the child OR directly into it.", "/versions/20/sections/4/paragraphs/4": "ExecReScan doesn't know about my subplans, so I have to do changed-parameter signaling myself.", "/versions/20/tables/0/columns/0/label": "Text-format label", "/versions/20/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "533db71211cb4a3802f26248622233ea4941bfa47e622a7d9f6a7d31a0dc96e9"}, "evidence_kind": "source and documentation", "explain_names": ["BitmapOr"], "partial_modes": [], "comparison_data": {"node_tag": "T_BitmapOr", "strategies": [], "text_names": ["BitmapOr"], "initializer": "ExecInitBitmapOr", "partial_modes": [], "memory_mechanism": "bitmap-lossification", "parallel_callbacks": []}, "comparison_hash": "c0ca503a6029c37ec720213dcdc3094997eb194d4920da68f94a7420d3e8f1d2", "explain_prefixes": ["Parallel", "Async"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeBitmapOr.c"}, "parallel_callbacks": []}}}, "snapshot": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_BitmapOr"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "BitmapOr"}, {"label": "\u8f93\u5165", "value": "\u4ea7\u751f\u4f4d\u56fe\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\uff0c\u4e0d\u662f\u5143\u7ec4\u6d41"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitBitmapOr"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "bitmap-lossification"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "81e2aeb0cc0d4cece84b7514385636cd11ea0e1faab93c721d4c3b86c20c9104", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, {"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "e2453b7155d55db8c3a59bc929362f01d3f9692b0a483e5aa81a7b6c50db6102", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}], "mechanism": "bitmap-lossification", "description": "\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "BitmapOr", "identity": "BitmapOr"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=18", "label": "EXPLAIN"}, {"url": "/docs/18/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/18/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/guc/work_mem/?v=18", "label": "work_mem"}], "release": {"ref": "PostgreSQL 18.6 source archive", "label": "18.6", "major": "18", "channel": "stable", "revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f", "source_url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "line": 1418, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1418", "sha256": "34c86d6070224a0e981efef51f79101d6d505e5874f1684ace183034bab14bb4", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, {"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "line": 201, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:201", "sha256": "f8a06a3f539077249b20664b2812433db6d7bd12b2c0ca633525db43d06f112a", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, {"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "path": "src/backend/executor/nodeBitmapOr.c", "label": "src/backend/executor/nodeBitmapOr.c", "sha256": "81e2aeb0cc0d4cece84b7514385636cd11ea0e1faab93c721d4c3b86c20c9104", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, {"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "52422b327a8049fbbb20d8b96008a0fc0a6fafa60f7eff3c695d5b2e83830120", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, {"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "path": "src/backend/nodes/tidbitmap.c", "label": "src/backend/nodes/tidbitmap.c", "sha256": "e2453b7155d55db8c3a59bc929362f01d3f9692b0a483e5aa81a7b6c50db6102", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, {"url": "https://pg.center/docs/18/using-explain.html#USING-EXPLAIN-CAVEATS", "path": "using-explain.html", "label": "PostgreSQL 18.6 \u00b7 using-explain", "sha256": "60040c30180093418a0affe56dd27dff9df2504b705b38039589e458bf5c31ed", "language": "en", "original_url": "/docs/18/using-explain.html#USING-EXPLAIN-CAVEATS"}], "node_tag": "T_BitmapOr", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aBitmapOr.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u6b64\u8282\u70b9\u6309\u57fa\u4e8e work_mem \u7684\u9884\u7b97\u5206\u914d\u5143\u7ec4\u4f4d\u7f6e\u4f4d\u56fe\u3002\u4f4d\u56fe\u53ef\u4ee5\u4fdd\u7559\u9875\u7ea7\u6709\u635f\u6761\u76ee\uff0c\u800c\u4e0d\u8bb0\u5f55\u6bcf\u4e2a\u5143\u7ec4\u4f4d\u7f6e\uff0c\u56e0\u6b64\u4ecd\u53ef\u80fd\u9700\u8981\u5806\u91cd\u68c0\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u540c\u7248\u672c\u624b\u518c\u8bf4\u660e", "paragraphs": ["\u7531\u4e8e\u5b9e\u73b0\u4e0a\u7684\u9650\u5236\uff0cBitmapAnd \u548c BitmapOr \u8282\u70b9\u62a5\u544a\u7684\u5b9e\u9645\u884c\u6570\u59cb\u7ec8\u4e3a\u96f6\u3002"]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["\u8bf4\u660e\uff1aBitmapOr \u4e0d\u4f7f\u7528\u5de6\u53f3\u5b50\u6811\uff0c\u800c\u50cf Append \u4e00\u6837\u7ef4\u62a4\u5b50\u8ba1\u5212\u5217\u8868\u3002\u4e0d\u8fc7\u5176\u903b\u8f91\u6bd4 Append \u7b80\u5355\u5f97\u591a\uff0c\u56e0\u4e3a\u65e0\u9700\u5904\u7406\u6b63\u5411\u6216\u53cd\u5411\u6267\u884c\u3002", "\u5bf9\u6bcf\u4e2a\u5f85\u6267\u884c\u8ba1\u5212\u8c03\u7528 ExecInitNode\uff0c\u5e76\u5c06\u7ed3\u679c\u4fdd\u5b58\u5230 bitmapplanstates \u6570\u7ec4\u3002", "BitmapOr \u8ba1\u5212\u6ca1\u6709\u8868\u8fbe\u5f0f\u4e0a\u4e0b\u6587\uff0c\u56e0\u4e3a\u5b83\u4eec\u4ece\u4e0d\u8c03\u7528 ExecQual \u6216 ExecProject\uff0c\u4e5f\u4e0d\u9700\u8981\u5143\u7ec4\u69fd\u3002", "\u53ef\u5bf9 BitmapIndexScan \u5b50\u8282\u70b9\u4f5c\u7279\u6b8a\u5904\u7406\uff0c\u907f\u514d\u4e3a\u6bcf\u4e2a\u5b50\u8282\u70b9\u663e\u5f0f\u8c03\u7528 tbm_union\uff1a\u76f4\u63a5\u4e0b\u4f20\u5f53\u524d\u7ed3\u679c\u4f4d\u56fe\uff0c\u8ba9\u5b50\u8282\u70b9\u5c06\u7ed3\u679c\u6309\u4f4d OR \u5408\u5e76\u8fdb\u53bb\u3002", "ExecReScan \u4e0d\u77e5\u9053\u5f53\u524d\u8282\u70b9\u7684\u5b50\u8ba1\u5212\uff0c\u56e0\u6b64\u5fc5\u987b\u81ea\u884c\u901a\u77e5\u5b50\u8ba1\u5212\u54ea\u4e9b\u53c2\u6570\u53d1\u751f\u4e86\u53d8\u5316\u3002"]}, {"code": "case T_BitmapOr:\n\t\t\tpname = sname = \"BitmapOr\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "strategies": [], "description": ["\u5bf9\u5404\u5b50\u8ba1\u5212\u4ea7\u751f\u7684\u4f4d\u56fe\u6c42\u5e76\u96c6\u3002"], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/versions/18/description/0": "Unions bitmaps produced by its child plans.", "/versions/18/facts/0/label": "Core node tag", "/versions/18/facts/1/label": "Structured EXPLAIN Node Type", "/versions/18/facts/2/label": "Inputs", "/versions/18/facts/2/value": "Bitmap-producing child plans", "/versions/18/facts/3/label": "Output", "/versions/18/facts/3/value": "Tuple-location bitmap, not a tuple stream", "/versions/18/facts/4/label": "Executor initializer", "/versions/18/facts/5/label": "Memory mechanism", "/versions/18/tables/0/title": "EXPLAIN labels in this source build", "/versions/18/related/1/label": "Using EXPLAIN", "/versions/18/related/2/label": "Parallel plans", "/versions/18/sections/0/title": "EXPLAIN names and attributes", "/versions/18/sections/1/title": "Memory and temporary storage", "/versions/18/sections/2/title": "Parallel execution and instrumentation", "/versions/18/sections/3/title": "Same-version manual discussion", "/versions/18/sections/4/title": "Executor implementation notes", "/versions/18/sections/5/title": "EXPLAIN identity in core source", "/versions/18/memory/description": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/18/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/18/sections/0/paragraphs/1": "Text names recorded by this source: BitmapOr.", "/versions/18/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/18/sections/1/paragraphs/0": "The node allocates a tuple-location bitmap using a work_mem-derived budget. A bitmap can retain page-level lossy entries instead of every tuple location; heap rechecks then remain necessary.", "/versions/18/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/18/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/18/sections/3/paragraphs/0": "BitmapAnd and BitmapOr nodes always report their actual row counts as zero, due to implementation limitations.", "/versions/18/sections/4/paragraphs/0": "NOTES BitmapOr nodes don't make use of their left and right subtrees, rather they maintain a list of subplans, much like Append nodes. The logic is much simpler than Append, however, since we needn't cope with forward/backward execution.", "/versions/18/sections/4/paragraphs/1": "call ExecInitNode on each of the plans to be executed and save the results into the array \"bitmapplanstates\".", "/versions/18/sections/4/paragraphs/2": "BitmapOr plans don't have expression contexts because they never call ExecQual or ExecProject. They don't need any tuple slots either.", "/versions/18/sections/4/paragraphs/3": "We can special-case BitmapIndexScan children to avoid an explicit tbm_union step for each child: just pass down the current result bitmap and let the child OR directly into it.", "/versions/18/sections/4/paragraphs/4": "ExecReScan doesn't know about my subplans, so I have to do changed-parameter signaling myself.", "/versions/18/tables/0/columns/0/label": "Text-format label", "/versions/18/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "6555fae880f7d80cecb472ac63d57e5c11bc60d158b34b99d1d8c4be9c3c8829"}, "evidence_kind": "source and documentation", "explain_names": ["BitmapOr"], "partial_modes": [], "comparison_data": {"node_tag": "T_BitmapOr", "strategies": [], "text_names": ["BitmapOr"], "initializer": "ExecInitBitmapOr", "partial_modes": [], "memory_mechanism": "bitmap-lossification", "parallel_callbacks": []}, "comparison_hash": "c0ca503a6029c37ec720213dcdc3094997eb194d4920da68f94a7420d3e8f1d2", "explain_prefixes": ["Parallel", "Async"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeBitmapOr.c"}, "parallel_callbacks": []}, "comparison": {"left": "17", "right": "18", "status": "unchanged", "diff": ""}}