{"kind": "tableam", "major": "18", "item": {"slug": "heap", "name": "heap", "name_zh": "Core table AM", "category": "\u6838\u5fc3\u8868\u8bbf\u95ee\u65b9\u6cd5", "summary": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002 \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a", "aliases": [], "content_hash": "36561f7db431a5bf0a84207c49b197eda716de37884dc845f2c72077625e0288", "versions": {"12": {"facts": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "41"}], "tables": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "related": [{"url": "/wiki/catalog/pg_am/?v=12", "label": "\u7cfb\u7edf\u76ee\u5f55 pg_am"}, {"url": "/wiki/guc/default_table_access_method/?v=12", "label": "default_table_access_method"}, {"url": "/wiki/indexam/?v=12", "label": "\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5"}], "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": "/docs/12/tableam.html", "path": "tableam.html", "label": "PostgreSQL 12 English manual", "sha256": "4a2f5484c66207255d238dc6a312b1fecf991782c97cbe20e2522b8e33eaf341"}, {"url": "https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2", "line": 2659, "path": "src/backend/access/heap/heapam_handler.c", "label": "src/backend/access/heap/heapam_handler.c:2659", "sha256": "30b90707d75ec73d6b8aa8d939d372120d59e4e2cb470e77e51164af45b41138", "archive_sha256": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}, {"url": "/docs/12/mvcc-intro.html", "path": "mvcc-intro.html", "label": "PostgreSQL 12 English manual", "sha256": "519cbfd791ca57455e33efd709a1fc8ae8164a3fc3efef28613a95aeed398d8e"}, {"url": "/docs/12/sql-createtable.html", "path": "sql-createtable.html", "label": "PostgreSQL 12 English manual", "sha256": "7210cf3ff82ffa37ef81ebbbc252e4807649dcb86050eaa3ea5fcba40a768656"}, {"url": "/docs/12/routine-vacuuming.html", "path": "routine-vacuuming.html", "label": "PostgreSQL 12 English manual", "sha256": "86a0c5de06e0271f0c1cc357c7060578b66260bf785fb78d02abd36afb5ea1f3"}, {"url": "/docs/12/catalog-pg-am.html", "path": "catalog-pg-am.html", "label": "PostgreSQL 12 English manual", "sha256": "93b1cac9d6535f34e389d3ba8488f21d9c5a7812ffba495b3d838b58548b547a"}], "zh_from": {"kind": "same-version-chinese-manual-with-source-derived-identity", "manual": {"url": "/zh/docs/12/tableam.html", "anchor": "", "locale": "zh-Hans", "version": "12", "build_id": 65, "page_key": "tableam.html", "extraction": "concept-introduction", "source_hash": "7bcfe6bbcc0047712fe862e7f8049b49e8e7a325a9f66302e14bb7b7b25edecd", "fragment_sha256": "856e5a523129a9846ff40f65adcf176928165358ee2898c5d157f6001cca5185", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "snapshot:sha256:86d2ff781f93e1de17122ebc514d5e64fcb63fed15941f496d7e146c6dcc7a49", "translated_from_revision": null}, "body_sha256": "086bfea4a9e9263300ea6e2702635d7664ffb647656d0aa91faf8ea7338e380a", "runtime_rerun": false, "authored_translation": "source-derived-identity", "source_facts_revision": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}, "facts_zh": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "41"}], "sections": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\t.finish_bulk_insert = heapam_finish_bulk_insert,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.compute_xid_horizon_for_tuples = heap_compute_xid_horizon_for_tuples,\n\n\t.relation_set_new_filenode = heapam_relation_set_new_filenode,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = heapam_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_block = heapam_scan_bitmap_next_block,\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "callbacks": {"scan_end": "heap_endscan", "scan_begin": "heap_beginscan", "tuple_lock": "heapam_tuple_lock", "scan_rescan": "heap_rescan", "multi_insert": "heap_multi_insert", "tuple_delete": "heapam_tuple_delete", "tuple_insert": "heapam_tuple_insert", "tuple_update": "heapam_tuple_update", "relation_size": "heapam_relation_size", "slot_callbacks": "heapam_slot_callbacks", "index_fetch_end": "heapam_index_fetch_end", "relation_vacuum": "heap_vacuum_rel", "tuple_tid_valid": "heapam_tuple_tid_valid", "scan_getnextslot": "heap_getnextslot", "index_fetch_begin": "heapam_index_fetch_begin", "index_fetch_reset": "heapam_index_fetch_reset", "index_fetch_tuple": "heapam_index_fetch_tuple", "finish_bulk_insert": "heapam_finish_bulk_insert", "relation_copy_data": "heapam_relation_copy_data", "index_validate_scan": "heapam_index_validate_scan", "tuple_get_latest_tid": "heap_get_latest_tid", "parallelscan_estimate": "table_block_parallelscan_estimate", "index_build_range_scan": "heapam_index_build_range_scan", "relation_estimate_size": "heapam_estimate_rel_size", "scan_bitmap_next_block": "heapam_scan_bitmap_next_block", "scan_bitmap_next_tuple": "heapam_scan_bitmap_next_tuple", "scan_sample_next_block": "heapam_scan_sample_next_block", "scan_sample_next_tuple": "heapam_scan_sample_next_tuple", "parallelscan_initialize": "table_block_parallelscan_initialize", "scan_analyze_next_block": "heapam_scan_analyze_next_block", "scan_analyze_next_tuple": "heapam_scan_analyze_next_tuple", "tuple_fetch_row_version": "heapam_fetch_row_version", "tuple_insert_speculative": "heapam_tuple_insert_speculative", "tuple_satisfies_snapshot": "heapam_tuple_satisfies_snapshot", "parallelscan_reinitialize": "table_block_parallelscan_reinitialize", "relation_copy_for_cluster": "heapam_relation_copy_for_cluster", "relation_set_new_filenode": "heapam_relation_set_new_filenode", "relation_needs_toast_table": "heapam_relation_needs_toast_table", "tuple_complete_speculative": "heapam_tuple_complete_speculative", "compute_xid_horizon_for_tuples": "heap_compute_xid_horizon_for_tuples", "relation_nontransactional_truncate": "heapam_relation_nontransactional_truncate"}, "center_zh": {"title": "Core table AM", "locale": "zh-Hans", "source": {"key": "heap", "locale": "zh-Hans", "version": "12", "text_hash": "68c8ffee3f9d8128b94316b3ad0db3c9077854390595f6ebe17b6d1db24b79e1", "collection": "tableam", "dataset_hash": "7c31b524dfe136022d39a6ae8dcfac6b3bbd5f8fdaf422536599981252aff0c9", "source_database": "center", "source_revision": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}, "payload": {"facts": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "41"}], "tables": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "zh_from": {"kind": "same-version-chinese-manual-with-source-derived-identity", "manual": {"url": "/zh/docs/12/tableam.html", "anchor": "", "locale": "zh-Hans", "version": "12", "build_id": 65, "page_key": "tableam.html", "extraction": "concept-introduction", "source_hash": "7bcfe6bbcc0047712fe862e7f8049b49e8e7a325a9f66302e14bb7b7b25edecd", "fragment_sha256": "856e5a523129a9846ff40f65adcf176928165358ee2898c5d157f6001cca5185", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "snapshot:sha256:86d2ff781f93e1de17122ebc514d5e64fcb63fed15941f496d7e146c6dcc7a49", "translated_from_revision": null}, "body_sha256": "086bfea4a9e9263300ea6e2702635d7664ffb647656d0aa91faf8ea7338e380a", "runtime_rerun": false, "authored_translation": "source-derived-identity", "source_facts_revision": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}, "sections": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\t.finish_bulk_insert = heapam_finish_bulk_insert,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.compute_xid_horizon_for_tuples = heap_compute_xid_horizon_for_tuples,\n\n\t.relation_set_new_filenode = heapam_relation_set_new_filenode,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = heapam_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_block = heapam_scan_bitmap_next_block,\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "description_zh": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002", "description_zh_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span class=\"productname\">PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em class=\"firstterm\">\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a class=\"link\" href=\"/zh/docs/12/catalog-pg-am.html\"><code class=\"structname\">pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code class=\"structname\">pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em class=\"firstterm\">\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a class=\"xref\" href=\"/zh/docs/12/sql-create-access-method.html\"><span class=\"refentrytitle\">CREATE ACCESS METHOD</span></a> \u548c <a class=\"xref\" href=\"/zh/docs/12/sql-drop-access-method.html\"><span class=\"refentrytitle\">DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code class=\"type\">internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code class=\"type\">table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 <code class=\"structname\">TableAmRoutine</code> \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 <code class=\"literal\">static const</code> \u53d8\u91cf\u6765\u5b9e\u73b0\u3002<code class=\"structname\">TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 <em class=\"firstterm\">API \u7ed3\u6784\u4f53</em>\uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 <code class=\"structname\">TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605\n  <a class=\"ulink\" href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/access/tableam.h;hb=HEAD\">\n<code class=\"filename\">src/include/access/tableam.h</code></a> \u6587\u4ef6\u3002\n </p><p>\n  \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1\n  <a class=\"ulink\" href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/executor/tuptable.h;hb=HEAD\">\n<code class=\"filename\">src/include/executor/tuptable.h</code></a>\uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002\n </p><p><a href=\"/zh/docs/12/tableam.html\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>"}, "summary": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002", "version": "12", "link_map": {"/zh/docs/12/tableam.html": "/docs/12/tableam.html", "/zh/docs/12/catalog-pg-am.html": "/docs/12/catalog-pg-am.html", "/zh/docs/12/sql-drop-access-method.html": "/docs/12/sql-drop-access-method.html", "/zh/docs/12/sql-create-access-method.html": "/docs/12/sql-create-access-method.html"}, "body_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span>PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em>\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a href=\"/zh/docs/12/catalog-pg-am.html\" rel=\"nofollow\"><code>pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code>pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em>\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a href=\"/zh/docs/12/sql-create-access-method.html\" rel=\"nofollow\"><span>CREATE ACCESS METHOD</span></a> \u548c <a href=\"/zh/docs/12/sql-drop-access-method.html\" rel=\"nofollow\"><span>DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code>internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code>table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 <code>static const</code> \u53d8\u91cf\u6765\u5b9e\u73b0\u3002<code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 <em>API \u7ed3\u6784\u4f53</em>\uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/access/tableam.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/access/tableam.h</code></a> \u6587\u4ef6\u3002\n </p><p>\n  \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/executor/tuptable.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/executor/tuptable.h</code></a>\uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002\n </p><p><a href=\"/zh/docs/12/tableam.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>", "body_sha256": "45fc023eb4425dd88303fbdf31e75ff80c8e5e3679f1ff85d8c2213480f7d972", "content_hash": "68c8ffee3f9d8128b94316b3ad0db3c9077854390595f6ebe17b6d1db24b79e1", "source_database": "center", "source_revision": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}, "tables_zh": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "description": ["\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002"], "manual_html": "", "manual_path": "/docs/12/tableam.html", "sections_zh": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\t.finish_bulk_insert = heapam_finish_bulk_insert,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.compute_xid_horizon_for_tuples = heap_compute_xid_horizon_for_tuples,\n\n\t.relation_set_new_filenode = heapam_relation_set_new_filenode,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = heapam_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_block = heapam_scan_bitmap_next_block,\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "localization": {"status": "complete", "sources": [{"url": "/docs/12/tableam.html", "method": "same-major semantic node", "sha256": "865b74e7676363fb601317927582b4791e8ba4319b4da1be27fc9f63dc35bb0f", "language": "zh", "matched_nodes": ["#TABLEAM/p[10]", "#TABLEAM/p[3]", "#TABLEAM/p[4]", "#TABLEAM/p[5]", "#TABLEAM/p[7]", "#TABLEAM/p[9]"]}], "language": "zh", "original_text": {"/versions/12/description/0": "The built-in heap table access method integrates tuple storage, visibility, scans, index fetches and maintenance with PostgreSQL.", "/versions/12/facts/0/label": "Interface family", "/versions/12/facts/0/value": "Table access method", "/versions/12/facts/1/label": "Handler or routine", "/versions/12/facts/2/label": "Recorded callbacks", "/versions/12/tables/0/title": "Registered interface handlers", "/versions/12/related/0/label": "System catalog pg_am", "/versions/12/related/2/label": "Index AM", "/versions/12/sections/0/title": "Interface and capability boundaries", "/versions/12/sections/1/title": "Heap storage, visibility and WAL", "/versions/12/sections/2/title": "Registered implementation in core source", "/versions/12/tables/0/rows/0/state": "Handler registered; conditions apply", "/versions/12/tables/0/rows/1/state": "Handler registered; conditions apply", "/versions/12/tables/0/rows/2/state": "Handler registered; conditions apply", "/versions/12/tables/0/rows/3/state": "Handler registered; conditions apply", "/versions/12/tables/0/rows/4/state": "Handler registered; conditions apply", "/versions/12/tables/0/rows/5/state": "Handler registered; conditions apply", "/versions/12/tables/0/rows/6/state": "Handler registered; conditions apply", "/versions/12/tables/0/rows/7/state": "Handler registered; conditions apply", "/versions/12/tables/0/rows/8/state": "Handler registered; conditions apply", "/versions/12/tables/0/rows/9/state": "Handler registered; conditions apply", "/versions/12/tables/0/rows/10/state": "Handler registered; conditions apply", "/versions/12/sections/0/paragraphs/0": "The matrix records callbacks actually registered in this source build. Registration identifies an implemented interface hook; options, query shape, privileges and provider rules determine whether an operation is allowed.", "/versions/12/sections/0/paragraphs/1": "The complete same-version manual below retains configuration, constraints and examples. No runtime capability test is claimed.", "/versions/12/sections/1/paragraphs/0": "This inventory starts with the Table AM interface in PostgreSQL 12. Earlier PostgreSQL heap storage is not relabeled as a Table AM implementation.", "/versions/12/sections/1/paragraphs/1": "Heap visibility follows PostgreSQL snapshots. WAL and crash-recovery behavior depend on relation persistence; temporary and unlogged tables differ from permanent tables. Index access methods remain separate from the table storage interface.", "/versions/12/tables/0/rows/0/feature": "Tuple slot", "/versions/12/tables/0/rows/1/feature": "Begin scan", "/versions/12/tables/0/rows/2/feature": "Parallel scan initialization", "/versions/12/tables/0/rows/3/feature": "Begin index lookup", "/versions/12/tables/0/rows/4/feature": "Fetch identified tuple", "/versions/12/tables/0/rows/5/feature": "Insert tuple", "/versions/12/tables/0/rows/6/feature": "Update tuple", "/versions/12/tables/0/rows/7/feature": "Delete tuple", "/versions/12/tables/0/rows/8/feature": "Vacuum relation", "/versions/12/tables/0/rows/9/feature": "Analyze block", "/versions/12/tables/0/columns/0/label": "Interface operation", "/versions/12/tables/0/columns/1/label": "Source observation", "/versions/12/tables/0/columns/2/label": "Callback", "/versions/12/tables/0/columns/3/label": "Implementation", "/versions/12/tables/0/rows/10/feature": "TOAST decision"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "bc98d33052e0429f513e08e48720a702fbe17b31fe9ee0c56bfc6acdbf3def5f", "canonical_center_text_hash": "68c8ffee3f9d8128b94316b3ad0db3c9077854390595f6ebe17b6d1db24b79e1"}, "evidence_kind": "source and documentation", "description_zh": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002", "comparison_data": {"options": [], "callbacks": {"scan_end": "heap_endscan", "scan_begin": "heap_beginscan", "tuple_lock": "heapam_tuple_lock", "scan_rescan": "heap_rescan", "multi_insert": "heap_multi_insert", "tuple_delete": "heapam_tuple_delete", "tuple_insert": "heapam_tuple_insert", "tuple_update": "heapam_tuple_update", "relation_size": "heapam_relation_size", "slot_callbacks": "heapam_slot_callbacks", "index_fetch_end": "heapam_index_fetch_end", "relation_vacuum": "heap_vacuum_rel", "tuple_tid_valid": "heapam_tuple_tid_valid", "scan_getnextslot": "heap_getnextslot", "index_fetch_begin": "heapam_index_fetch_begin", "index_fetch_reset": "heapam_index_fetch_reset", "index_fetch_tuple": "heapam_index_fetch_tuple", "finish_bulk_insert": "heapam_finish_bulk_insert", "relation_copy_data": "heapam_relation_copy_data", "index_validate_scan": "heapam_index_validate_scan", "tuple_get_latest_tid": "heap_get_latest_tid", "parallelscan_estimate": "table_block_parallelscan_estimate", "index_build_range_scan": "heapam_index_build_range_scan", "relation_estimate_size": "heapam_estimate_rel_size", "scan_bitmap_next_block": "heapam_scan_bitmap_next_block", "scan_bitmap_next_tuple": "heapam_scan_bitmap_next_tuple", "scan_sample_next_block": "heapam_scan_sample_next_block", "scan_sample_next_tuple": "heapam_scan_sample_next_tuple", "parallelscan_initialize": "table_block_parallelscan_initialize", "scan_analyze_next_block": "heapam_scan_analyze_next_block", "scan_analyze_next_tuple": "heapam_scan_analyze_next_tuple", "tuple_fetch_row_version": "heapam_fetch_row_version", "tuple_insert_speculative": "heapam_tuple_insert_speculative", "tuple_satisfies_snapshot": "heapam_tuple_satisfies_snapshot", "parallelscan_reinitialize": "table_block_parallelscan_reinitialize", "relation_copy_for_cluster": "heapam_relation_copy_for_cluster", "relation_set_new_filenode": "heapam_relation_set_new_filenode", "relation_needs_toast_table": "heapam_relation_needs_toast_table", "tuple_complete_speculative": "heapam_tuple_complete_speculative", "compute_xid_horizon_for_tuples": "heap_compute_xid_horizon_for_tuples", "relation_nontransactional_truncate": "heapam_relation_nontransactional_truncate"}, "source_options": [], "protocol_versions": {}}, "comparison_hash": "cdc168038f8a0930454c83eead818d36c8fbfe842d4d6e716a39e36c6a09d9cc", "manual_language": "zh", "runtime_verified": false, "description_zh_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span>PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em>\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a href=\"/zh/docs/12/catalog-pg-am.html\" rel=\"nofollow\"><code>pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code>pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em>\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a href=\"/zh/docs/12/sql-create-access-method.html\" rel=\"nofollow\"><span>CREATE ACCESS METHOD</span></a> \u548c <a href=\"/zh/docs/12/sql-drop-access-method.html\" rel=\"nofollow\"><span>DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code>internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code>table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 <code>static const</code> \u53d8\u91cf\u6765\u5b9e\u73b0\u3002<code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 <em>API \u7ed3\u6784\u4f53</em>\uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/access/tableam.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/access/tableam.h</code></a> \u6587\u4ef6\u3002\n </p><p>\n  \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/executor/tuptable.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/executor/tuptable.h</code></a>\uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002\n </p><p><a href=\"/zh/docs/12/tableam.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>"}, "13": {"facts": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "42"}], "tables": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "related": [{"url": "/wiki/catalog/pg_am/?v=13", "label": "\u7cfb\u7edf\u76ee\u5f55 pg_am"}, {"url": "/wiki/guc/default_table_access_method/?v=13", "label": "default_table_access_method"}, {"url": "/wiki/indexam/?v=13", "label": "\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5"}], "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": "/docs/13/tableam.html", "path": "tableam.html", "label": "PostgreSQL 13 English manual", "sha256": "7207b1654a8740007f663a820269f764f8b566f9f6bbbf739f768970658e4f52"}, {"url": "https://ftp.postgresql.org/pub/source/v13.23/postgresql-13.23.tar.bz2", "line": 2536, "path": "src/backend/access/heap/heapam_handler.c", "label": "src/backend/access/heap/heapam_handler.c:2536", "sha256": "7504b49b1b306583d631e5608e081b280b7e72362f280e8db5490871727e8660", "archive_sha256": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}, {"url": "/docs/13/mvcc-intro.html", "path": "mvcc-intro.html", "label": "PostgreSQL 13 English manual", "sha256": "a970ff541c86fe8f48eabf49dcda92879e1db437223c629d6c83d38c0cd70180"}, {"url": "/docs/13/sql-createtable.html", "path": "sql-createtable.html", "label": "PostgreSQL 13 English manual", "sha256": "912dd15faaa243438f33082160f2848636d1940afea42c36cf6d21a2a46c8cb8"}, {"url": "/docs/13/routine-vacuuming.html", "path": "routine-vacuuming.html", "label": "PostgreSQL 13 English manual", "sha256": "c8cdd4e67dcc28e8f62ed22b8a6c3e8e2762359267655bea2c9c5b3dcb3a9efe"}, {"url": "/docs/13/catalog-pg-am.html", "path": "catalog-pg-am.html", "label": "PostgreSQL 13 English manual", "sha256": "a5a599fab10fbcdbd5dd963e70f41868984db33c061716372b9957b9c111ce7a"}], "zh_from": {"kind": "same-version-chinese-manual-with-source-derived-identity", "manual": {"url": "/zh/docs/13/tableam.html", "anchor": "", "locale": "zh-Hans", "version": "13", "build_id": 66, "page_key": "tableam.html", "extraction": "concept-introduction", "source_hash": "b76688eff8515a7ffb61cc569b4392007d083751263e846da3fac2b335e40d36", "fragment_sha256": "099ef2b3f008da86dfb7ee82ac4a171f7499af889aa6a2bcf5311c343c743738", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "snapshot:sha256:a13a825c39f0268ef1cfe9137e283e38d0da73b2d7894f0733c7b26372a4f6a4", "translated_from_revision": null}, "body_sha256": "9f6d127adba83bd47b2d1de459f82b3093626c7879d5cb3b61b64efe60185a25", "runtime_rerun": false, "authored_translation": "source-derived-identity", "source_facts_revision": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}, "facts_zh": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "42"}], "sections": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.compute_xid_horizon_for_tuples = heap_compute_xid_horizon_for_tuples,\n\n\t.relation_set_new_filenode = heapam_relation_set_new_filenode,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_block = heapam_scan_bitmap_next_block,\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "callbacks": {"scan_end": "heap_endscan", "scan_begin": "heap_beginscan", "tuple_lock": "heapam_tuple_lock", "scan_rescan": "heap_rescan", "multi_insert": "heap_multi_insert", "tuple_delete": "heapam_tuple_delete", "tuple_insert": "heapam_tuple_insert", "tuple_update": "heapam_tuple_update", "relation_size": "table_block_relation_size", "slot_callbacks": "heapam_slot_callbacks", "index_fetch_end": "heapam_index_fetch_end", "relation_vacuum": "heap_vacuum_rel", "tuple_tid_valid": "heapam_tuple_tid_valid", "scan_getnextslot": "heap_getnextslot", "index_fetch_begin": "heapam_index_fetch_begin", "index_fetch_reset": "heapam_index_fetch_reset", "index_fetch_tuple": "heapam_index_fetch_tuple", "relation_toast_am": "heapam_relation_toast_am", "relation_copy_data": "heapam_relation_copy_data", "index_validate_scan": "heapam_index_validate_scan", "tuple_get_latest_tid": "heap_get_latest_tid", "parallelscan_estimate": "table_block_parallelscan_estimate", "index_build_range_scan": "heapam_index_build_range_scan", "relation_estimate_size": "heapam_estimate_rel_size", "scan_bitmap_next_block": "heapam_scan_bitmap_next_block", "scan_bitmap_next_tuple": "heapam_scan_bitmap_next_tuple", "scan_sample_next_block": "heapam_scan_sample_next_block", "scan_sample_next_tuple": "heapam_scan_sample_next_tuple", "parallelscan_initialize": "table_block_parallelscan_initialize", "scan_analyze_next_block": "heapam_scan_analyze_next_block", "scan_analyze_next_tuple": "heapam_scan_analyze_next_tuple", "tuple_fetch_row_version": "heapam_fetch_row_version", "tuple_insert_speculative": "heapam_tuple_insert_speculative", "tuple_satisfies_snapshot": "heapam_tuple_satisfies_snapshot", "parallelscan_reinitialize": "table_block_parallelscan_reinitialize", "relation_copy_for_cluster": "heapam_relation_copy_for_cluster", "relation_set_new_filenode": "heapam_relation_set_new_filenode", "relation_fetch_toast_slice": "heap_fetch_toast_slice", "relation_needs_toast_table": "heapam_relation_needs_toast_table", "tuple_complete_speculative": "heapam_tuple_complete_speculative", "compute_xid_horizon_for_tuples": "heap_compute_xid_horizon_for_tuples", "relation_nontransactional_truncate": "heapam_relation_nontransactional_truncate"}, "center_zh": {"title": "Core table AM", "locale": "zh-Hans", "source": {"key": "heap", "locale": "zh-Hans", "version": "13", "text_hash": "aa43c4ba2524d6a26b1fbce9d4cfa6c8c56c5a004b0e6f5a48405ef07ae58bd7", "collection": "tableam", "dataset_hash": "7c31b524dfe136022d39a6ae8dcfac6b3bbd5f8fdaf422536599981252aff0c9", "source_database": "center", "source_revision": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}, "payload": {"facts": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "42"}], "tables": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "zh_from": {"kind": "same-version-chinese-manual-with-source-derived-identity", "manual": {"url": "/zh/docs/13/tableam.html", "anchor": "", "locale": "zh-Hans", "version": "13", "build_id": 66, "page_key": "tableam.html", "extraction": "concept-introduction", "source_hash": "b76688eff8515a7ffb61cc569b4392007d083751263e846da3fac2b335e40d36", "fragment_sha256": "099ef2b3f008da86dfb7ee82ac4a171f7499af889aa6a2bcf5311c343c743738", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "snapshot:sha256:a13a825c39f0268ef1cfe9137e283e38d0da73b2d7894f0733c7b26372a4f6a4", "translated_from_revision": null}, "body_sha256": "9f6d127adba83bd47b2d1de459f82b3093626c7879d5cb3b61b64efe60185a25", "runtime_rerun": false, "authored_translation": "source-derived-identity", "source_facts_revision": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}, "sections": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.compute_xid_horizon_for_tuples = heap_compute_xid_horizon_for_tuples,\n\n\t.relation_set_new_filenode = heapam_relation_set_new_filenode,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_block = heapam_scan_bitmap_next_block,\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "description_zh": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002", "description_zh_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span class=\"productname\">PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em class=\"firstterm\">\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a class=\"link\" href=\"/zh/docs/13/catalog-pg-am.html\"><code class=\"structname\">pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code class=\"structname\">pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em class=\"firstterm\">\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a class=\"xref\" href=\"/zh/docs/13/sql-create-access-method.html\"><span class=\"refentrytitle\">CREATE ACCESS METHOD</span></a> \u548c <a class=\"xref\" href=\"/zh/docs/13/sql-drop-access-method.html\"><span class=\"refentrytitle\">DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code class=\"type\">internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code class=\"type\">table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 <code class=\"structname\">TableAmRoutine</code> \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 <code class=\"literal\">static const</code> \u53d8\u91cf\u6765\u5b9e\u73b0\u3002<code class=\"structname\">TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 <em class=\"firstterm\">API \u7ed3\u6784\u4f53</em>\uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 <code class=\"structname\">TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605\n  <a class=\"ulink\" href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/access/tableam.h;hb=HEAD\">\n<code class=\"filename\">src/include/access/tableam.h</code></a> \u6587\u4ef6\u3002\n </p><p>\n  \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1\n  <a class=\"ulink\" href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/executor/tuptable.h;hb=HEAD\">\n<code class=\"filename\">src/include/executor/tuptable.h</code></a>\uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002\n </p><p><a href=\"/zh/docs/13/tableam.html\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>"}, "summary": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002", "version": "13", "link_map": {"/zh/docs/13/tableam.html": "/docs/13/tableam.html", "/zh/docs/13/catalog-pg-am.html": "/docs/13/catalog-pg-am.html", "/zh/docs/13/sql-drop-access-method.html": "/docs/13/sql-drop-access-method.html", "/zh/docs/13/sql-create-access-method.html": "/docs/13/sql-create-access-method.html"}, "body_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span>PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em>\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a href=\"/zh/docs/13/catalog-pg-am.html\" rel=\"nofollow\"><code>pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code>pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em>\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a href=\"/zh/docs/13/sql-create-access-method.html\" rel=\"nofollow\"><span>CREATE ACCESS METHOD</span></a> \u548c <a href=\"/zh/docs/13/sql-drop-access-method.html\" rel=\"nofollow\"><span>DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code>internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code>table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 <code>static const</code> \u53d8\u91cf\u6765\u5b9e\u73b0\u3002<code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 <em>API \u7ed3\u6784\u4f53</em>\uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/access/tableam.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/access/tableam.h</code></a> \u6587\u4ef6\u3002\n </p><p>\n  \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/executor/tuptable.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/executor/tuptable.h</code></a>\uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002\n </p><p><a href=\"/zh/docs/13/tableam.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>", "body_sha256": "336953280f0c9cf8443d1d4614e5941c2d02584098531f98c6191d1d22ed8cd2", "content_hash": "aa43c4ba2524d6a26b1fbce9d4cfa6c8c56c5a004b0e6f5a48405ef07ae58bd7", "source_database": "center", "source_revision": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}, "tables_zh": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "description": ["\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002"], "manual_html": "", "manual_path": "/docs/13/tableam.html", "sections_zh": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.compute_xid_horizon_for_tuples = heap_compute_xid_horizon_for_tuples,\n\n\t.relation_set_new_filenode = heapam_relation_set_new_filenode,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_block = heapam_scan_bitmap_next_block,\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "localization": {"status": "complete", "sources": [{"url": "/docs/13/tableam.html", "method": "same-major semantic node", "sha256": "203fa0468aabf50c378c2bf7d73ee58a72fd30323287bd864e40350f47267fb0", "language": "zh", "matched_nodes": ["#TABLEAM/p[10]", "#TABLEAM/p[3]", "#TABLEAM/p[4]", "#TABLEAM/p[5]", "#TABLEAM/p[7]", "#TABLEAM/p[9]"]}], "language": "zh", "original_text": {"/versions/13/description/0": "The built-in heap table access method integrates tuple storage, visibility, scans, index fetches and maintenance with PostgreSQL.", "/versions/13/facts/0/label": "Interface family", "/versions/13/facts/0/value": "Table access method", "/versions/13/facts/1/label": "Handler or routine", "/versions/13/facts/2/label": "Recorded callbacks", "/versions/13/tables/0/title": "Registered interface handlers", "/versions/13/related/0/label": "System catalog pg_am", "/versions/13/related/2/label": "Index AM", "/versions/13/sections/0/title": "Interface and capability boundaries", "/versions/13/sections/1/title": "Heap storage, visibility and WAL", "/versions/13/sections/2/title": "Registered implementation in core source", "/versions/13/tables/0/rows/0/state": "Handler registered; conditions apply", "/versions/13/tables/0/rows/1/state": "Handler registered; conditions apply", "/versions/13/tables/0/rows/2/state": "Handler registered; conditions apply", "/versions/13/tables/0/rows/3/state": "Handler registered; conditions apply", "/versions/13/tables/0/rows/4/state": "Handler registered; conditions apply", "/versions/13/tables/0/rows/5/state": "Handler registered; conditions apply", "/versions/13/tables/0/rows/6/state": "Handler registered; conditions apply", "/versions/13/tables/0/rows/7/state": "Handler registered; conditions apply", "/versions/13/tables/0/rows/8/state": "Handler registered; conditions apply", "/versions/13/tables/0/rows/9/state": "Handler registered; conditions apply", "/versions/13/tables/0/rows/10/state": "Handler registered; conditions apply", "/versions/13/sections/0/paragraphs/0": "The matrix records callbacks actually registered in this source build. Registration identifies an implemented interface hook; options, query shape, privileges and provider rules determine whether an operation is allowed.", "/versions/13/sections/0/paragraphs/1": "The complete same-version manual below retains configuration, constraints and examples. No runtime capability test is claimed.", "/versions/13/sections/1/paragraphs/0": "This inventory starts with the Table AM interface in PostgreSQL 12. Earlier PostgreSQL heap storage is not relabeled as a Table AM implementation.", "/versions/13/sections/1/paragraphs/1": "Heap visibility follows PostgreSQL snapshots. WAL and crash-recovery behavior depend on relation persistence; temporary and unlogged tables differ from permanent tables. Index access methods remain separate from the table storage interface.", "/versions/13/tables/0/rows/0/feature": "Tuple slot", "/versions/13/tables/0/rows/1/feature": "Begin scan", "/versions/13/tables/0/rows/2/feature": "Parallel scan initialization", "/versions/13/tables/0/rows/3/feature": "Begin index lookup", "/versions/13/tables/0/rows/4/feature": "Fetch identified tuple", "/versions/13/tables/0/rows/5/feature": "Insert tuple", "/versions/13/tables/0/rows/6/feature": "Update tuple", "/versions/13/tables/0/rows/7/feature": "Delete tuple", "/versions/13/tables/0/rows/8/feature": "Vacuum relation", "/versions/13/tables/0/rows/9/feature": "Analyze block", "/versions/13/tables/0/columns/0/label": "Interface operation", "/versions/13/tables/0/columns/1/label": "Source observation", "/versions/13/tables/0/columns/2/label": "Callback", "/versions/13/tables/0/columns/3/label": "Implementation", "/versions/13/tables/0/rows/10/feature": "TOAST decision"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "10afa29e97b77fd0163581be8cf0d20d46eda9aee635a0b35bd8c02c89526fb4", "canonical_center_text_hash": "aa43c4ba2524d6a26b1fbce9d4cfa6c8c56c5a004b0e6f5a48405ef07ae58bd7"}, "evidence_kind": "source and documentation", "description_zh": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002", "comparison_data": {"options": [], "callbacks": {"scan_end": "heap_endscan", "scan_begin": "heap_beginscan", "tuple_lock": "heapam_tuple_lock", "scan_rescan": "heap_rescan", "multi_insert": "heap_multi_insert", "tuple_delete": "heapam_tuple_delete", "tuple_insert": "heapam_tuple_insert", "tuple_update": "heapam_tuple_update", "relation_size": "table_block_relation_size", "slot_callbacks": "heapam_slot_callbacks", "index_fetch_end": "heapam_index_fetch_end", "relation_vacuum": "heap_vacuum_rel", "tuple_tid_valid": "heapam_tuple_tid_valid", "scan_getnextslot": "heap_getnextslot", "index_fetch_begin": "heapam_index_fetch_begin", "index_fetch_reset": "heapam_index_fetch_reset", "index_fetch_tuple": "heapam_index_fetch_tuple", "relation_toast_am": "heapam_relation_toast_am", "relation_copy_data": "heapam_relation_copy_data", "index_validate_scan": "heapam_index_validate_scan", "tuple_get_latest_tid": "heap_get_latest_tid", "parallelscan_estimate": "table_block_parallelscan_estimate", "index_build_range_scan": "heapam_index_build_range_scan", "relation_estimate_size": "heapam_estimate_rel_size", "scan_bitmap_next_block": "heapam_scan_bitmap_next_block", "scan_bitmap_next_tuple": "heapam_scan_bitmap_next_tuple", "scan_sample_next_block": "heapam_scan_sample_next_block", "scan_sample_next_tuple": "heapam_scan_sample_next_tuple", "parallelscan_initialize": "table_block_parallelscan_initialize", "scan_analyze_next_block": "heapam_scan_analyze_next_block", "scan_analyze_next_tuple": "heapam_scan_analyze_next_tuple", "tuple_fetch_row_version": "heapam_fetch_row_version", "tuple_insert_speculative": "heapam_tuple_insert_speculative", "tuple_satisfies_snapshot": "heapam_tuple_satisfies_snapshot", "parallelscan_reinitialize": "table_block_parallelscan_reinitialize", "relation_copy_for_cluster": "heapam_relation_copy_for_cluster", "relation_set_new_filenode": "heapam_relation_set_new_filenode", "relation_fetch_toast_slice": "heap_fetch_toast_slice", "relation_needs_toast_table": "heapam_relation_needs_toast_table", "tuple_complete_speculative": "heapam_tuple_complete_speculative", "compute_xid_horizon_for_tuples": "heap_compute_xid_horizon_for_tuples", "relation_nontransactional_truncate": "heapam_relation_nontransactional_truncate"}, "source_options": [], "protocol_versions": {}}, "comparison_hash": "850336e9baa50632ce39bf1c3673c2fdc1c6f0c399d99c8ead229845b7a7c8d4", "manual_language": "zh", "runtime_verified": false, "description_zh_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span>PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em>\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a href=\"/zh/docs/13/catalog-pg-am.html\" rel=\"nofollow\"><code>pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code>pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em>\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a href=\"/zh/docs/13/sql-create-access-method.html\" rel=\"nofollow\"><span>CREATE ACCESS METHOD</span></a> \u548c <a href=\"/zh/docs/13/sql-drop-access-method.html\" rel=\"nofollow\"><span>DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code>internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code>table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 <code>static const</code> \u53d8\u91cf\u6765\u5b9e\u73b0\u3002<code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 <em>API \u7ed3\u6784\u4f53</em>\uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/access/tableam.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/access/tableam.h</code></a> \u6587\u4ef6\u3002\n </p><p>\n  \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/executor/tuptable.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/executor/tuptable.h</code></a>\uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002\n </p><p><a href=\"/zh/docs/13/tableam.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>"}, "14": {"facts": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "44"}], "tables": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "related": [{"url": "/wiki/catalog/pg_am/?v=14", "label": "\u7cfb\u7edf\u76ee\u5f55 pg_am"}, {"url": "/wiki/guc/default_table_access_method/?v=14", "label": "default_table_access_method"}, {"url": "/wiki/indexam/?v=14", "label": "\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5"}], "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": "/docs/14/tableam.html", "path": "tableam.html", "label": "PostgreSQL 14 English manual", "sha256": "935eb557dd2605cec6a969afe4739666db36be6dfb09557293f096a59ea9525a"}, {"url": "https://ftp.postgresql.org/pub/source/v14.24/postgresql-14.24.tar.bz2", "line": 2539, "path": "src/backend/access/heap/heapam_handler.c", "label": "src/backend/access/heap/heapam_handler.c:2539", "sha256": "13ab8be6d597a85414e7d921717eb959d3516e362acb94c3e67926a5b3715e2a", "archive_sha256": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}, {"url": "/docs/14/mvcc-intro.html", "path": "mvcc-intro.html", "label": "PostgreSQL 14 English manual", "sha256": "5007d7da5abbae92e3dbda5590c9171ed73c22a171a29bea875c93464cdcfafa"}, {"url": "/docs/14/sql-createtable.html", "path": "sql-createtable.html", "label": "PostgreSQL 14 English manual", "sha256": "2d92d1040e37f5d94ce279dc9f1555a720179397fcf3aa8412f5278ec1d943e8"}, {"url": "/docs/14/routine-vacuuming.html", "path": "routine-vacuuming.html", "label": "PostgreSQL 14 English manual", "sha256": "3c8ae732adb6e03978d28407de3a25552b338da62859ddb3c70ca7d7c60d1239"}, {"url": "/docs/14/catalog-pg-am.html", "path": "catalog-pg-am.html", "label": "PostgreSQL 14 English manual", "sha256": "a7431722a73e39d7ca74d4d0fa8c51435a442e5cd66564907330493a7b80edd5"}], "zh_from": {"kind": "same-version-chinese-manual-with-source-derived-identity", "manual": {"url": "/zh/docs/14/tableam.html", "anchor": "", "locale": "zh-Hans", "version": "14", "build_id": 99, "page_key": "tableam.html", "extraction": "concept-introduction", "source_hash": "b0d1c999bcb4c6a9f166d829d474626b9ae7e27b64f8f858738829ea33bb5d50", "fragment_sha256": "d6a3e53321b7d380b3e20587efc93263f8fe64715c1857edd7cba88da5745031", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:87e6aa4fd6e1ec85c5f4a6de4f5647cfd9e5de734ca2c266d32b6d6192c662ef", "translated_from_revision": null}, "body_sha256": "5bebcb23bf59304ce27e28e1226fed6f8f498e8ddb38559f6cbabfb56e952fe1", "runtime_rerun": false, "authored_translation": "source-derived-identity", "source_facts_revision": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}, "facts_zh": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "44"}], "sections": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filenode = heapam_relation_set_new_filenode,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_block = heapam_scan_bitmap_next_block,\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "callbacks": {"scan_end": "heap_endscan", "scan_begin": "heap_beginscan", "tuple_lock": "heapam_tuple_lock", "scan_rescan": "heap_rescan", "multi_insert": "heap_multi_insert", "tuple_delete": "heapam_tuple_delete", "tuple_insert": "heapam_tuple_insert", "tuple_update": "heapam_tuple_update", "relation_size": "table_block_relation_size", "slot_callbacks": "heapam_slot_callbacks", "index_fetch_end": "heapam_index_fetch_end", "relation_vacuum": "heap_vacuum_rel", "tuple_tid_valid": "heapam_tuple_tid_valid", "scan_getnextslot": "heap_getnextslot", "index_fetch_begin": "heapam_index_fetch_begin", "index_fetch_reset": "heapam_index_fetch_reset", "index_fetch_tuple": "heapam_index_fetch_tuple", "relation_toast_am": "heapam_relation_toast_am", "scan_set_tidrange": "heap_set_tidrange", "relation_copy_data": "heapam_relation_copy_data", "index_delete_tuples": "heap_index_delete_tuples", "index_validate_scan": "heapam_index_validate_scan", "tuple_get_latest_tid": "heap_get_latest_tid", "parallelscan_estimate": "table_block_parallelscan_estimate", "index_build_range_scan": "heapam_index_build_range_scan", "relation_estimate_size": "heapam_estimate_rel_size", "scan_bitmap_next_block": "heapam_scan_bitmap_next_block", "scan_bitmap_next_tuple": "heapam_scan_bitmap_next_tuple", "scan_sample_next_block": "heapam_scan_sample_next_block", "scan_sample_next_tuple": "heapam_scan_sample_next_tuple", "parallelscan_initialize": "table_block_parallelscan_initialize", "scan_analyze_next_block": "heapam_scan_analyze_next_block", "scan_analyze_next_tuple": "heapam_scan_analyze_next_tuple", "tuple_fetch_row_version": "heapam_fetch_row_version", "tuple_insert_speculative": "heapam_tuple_insert_speculative", "tuple_satisfies_snapshot": "heapam_tuple_satisfies_snapshot", "parallelscan_reinitialize": "table_block_parallelscan_reinitialize", "relation_copy_for_cluster": "heapam_relation_copy_for_cluster", "relation_set_new_filenode": "heapam_relation_set_new_filenode", "scan_getnextslot_tidrange": "heap_getnextslot_tidrange", "relation_fetch_toast_slice": "heap_fetch_toast_slice", "relation_needs_toast_table": "heapam_relation_needs_toast_table", "tuple_complete_speculative": "heapam_tuple_complete_speculative", "relation_nontransactional_truncate": "heapam_relation_nontransactional_truncate"}, "center_zh": {"title": "Core table AM", "locale": "zh-Hans", "source": {"key": "heap", "locale": "zh-Hans", "version": "14", "text_hash": "45fb76963262ca49eabaeb2f27f4441e920895a4a0bc60312116ec9097c386fc", "collection": "tableam", "dataset_hash": "7c31b524dfe136022d39a6ae8dcfac6b3bbd5f8fdaf422536599981252aff0c9", "source_database": "center", "source_revision": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}, "payload": {"facts": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "44"}], "tables": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "zh_from": {"kind": "same-version-chinese-manual-with-source-derived-identity", "manual": {"url": "/zh/docs/14/tableam.html", "anchor": "", "locale": "zh-Hans", "version": "14", "build_id": 99, "page_key": "tableam.html", "extraction": "concept-introduction", "source_hash": "b0d1c999bcb4c6a9f166d829d474626b9ae7e27b64f8f858738829ea33bb5d50", "fragment_sha256": "d6a3e53321b7d380b3e20587efc93263f8fe64715c1857edd7cba88da5745031", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:87e6aa4fd6e1ec85c5f4a6de4f5647cfd9e5de734ca2c266d32b6d6192c662ef", "translated_from_revision": null}, "body_sha256": "5bebcb23bf59304ce27e28e1226fed6f8f498e8ddb38559f6cbabfb56e952fe1", "runtime_rerun": false, "authored_translation": "source-derived-identity", "source_facts_revision": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}, "sections": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filenode = heapam_relation_set_new_filenode,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_block = heapam_scan_bitmap_next_block,\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "description_zh": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002", "description_zh_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span class=\"productname\">PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em class=\"firstterm\">\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a class=\"link\" href=\"/zh/docs/14/catalog-pg-am.html\"><code class=\"structname\">pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code class=\"structname\">pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em class=\"firstterm\">\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a class=\"xref\" href=\"/zh/docs/14/sql-create-access-method.html\"><span class=\"refentrytitle\">CREATE ACCESS METHOD</span></a> \u548c <a class=\"xref\" href=\"/zh/docs/14/sql-drop-access-method.html\"><span class=\"refentrytitle\">DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code class=\"type\">internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code class=\"type\">table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 <code class=\"structname\">TableAmRoutine</code> \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 <code class=\"literal\">static const</code> \u53d8\u91cf\u6765\u5b9e\u73b0\u3002<code class=\"structname\">TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 <em class=\"firstterm\">API \u7ed3\u6784\u4f53</em>\uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 <code class=\"structname\">TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605\n  <a class=\"ulink\" href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/access/tableam.h;hb=HEAD\">\n<code class=\"filename\">src/include/access/tableam.h</code></a> \u6587\u4ef6\u3002\n </p><p>\n  \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd <acronym class=\"acronym\">AM</acronym> \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1\n  <a class=\"ulink\" href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/executor/tuptable.h;hb=HEAD\">\n<code class=\"filename\">src/include/executor/tuptable.h</code></a>\uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002\n </p><p><a href=\"/zh/docs/14/tableam.html\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>"}, "summary": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002", "version": "14", "link_map": {"/zh/docs/14/tableam.html": "/docs/14/tableam.html", "/zh/docs/14/catalog-pg-am.html": "/docs/14/catalog-pg-am.html", "/zh/docs/14/sql-drop-access-method.html": "/docs/14/sql-drop-access-method.html", "/zh/docs/14/sql-create-access-method.html": "/docs/14/sql-create-access-method.html"}, "body_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span>PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em>\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a href=\"/zh/docs/14/catalog-pg-am.html\" rel=\"nofollow\"><code>pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code>pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em>\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a href=\"/zh/docs/14/sql-create-access-method.html\" rel=\"nofollow\"><span>CREATE ACCESS METHOD</span></a> \u548c <a href=\"/zh/docs/14/sql-drop-access-method.html\" rel=\"nofollow\"><span>DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code>internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code>table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 <code>static const</code> \u53d8\u91cf\u6765\u5b9e\u73b0\u3002<code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 <em>API \u7ed3\u6784\u4f53</em>\uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/access/tableam.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/access/tableam.h</code></a> \u6587\u4ef6\u3002\n </p><p>\n  \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd <acronym>AM</acronym> \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/executor/tuptable.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/executor/tuptable.h</code></a>\uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002\n </p><p><a href=\"/zh/docs/14/tableam.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>", "body_sha256": "c09a3e615142aedc7a36eb50be267bf44e35023205fb1bbeebf4f1147af99fdd", "content_hash": "45fb76963262ca49eabaeb2f27f4441e920895a4a0bc60312116ec9097c386fc", "source_database": "center", "source_revision": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}, "tables_zh": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "description": ["\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002"], "manual_html": "", "manual_path": "/docs/14/tableam.html", "sections_zh": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filenode = heapam_relation_set_new_filenode,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_block = heapam_scan_bitmap_next_block,\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "localization": {"status": "complete", "sources": [{"url": "/docs/14/tableam.html", "method": "same-major semantic node", "sha256": "7d4f5f4e5bad53c80eb27ff81884bfa98d1fa447df8dd24a37806189a541a350", "language": "zh", "matched_nodes": ["#TABLEAM/p[10]", "#TABLEAM/p[3]", "#TABLEAM/p[4]", "#TABLEAM/p[5]", "#TABLEAM/p[7]", "#TABLEAM/p[9]"]}], "language": "zh", "original_text": {"/versions/14/description/0": "The built-in heap table access method integrates tuple storage, visibility, scans, index fetches and maintenance with PostgreSQL.", "/versions/14/facts/0/label": "Interface family", "/versions/14/facts/0/value": "Table access method", "/versions/14/facts/1/label": "Handler or routine", "/versions/14/facts/2/label": "Recorded callbacks", "/versions/14/tables/0/title": "Registered interface handlers", "/versions/14/related/0/label": "System catalog pg_am", "/versions/14/related/2/label": "Index AM", "/versions/14/sections/0/title": "Interface and capability boundaries", "/versions/14/sections/1/title": "Heap storage, visibility and WAL", "/versions/14/sections/2/title": "Registered implementation in core source", "/versions/14/tables/0/rows/0/state": "Handler registered; conditions apply", "/versions/14/tables/0/rows/1/state": "Handler registered; conditions apply", "/versions/14/tables/0/rows/2/state": "Handler registered; conditions apply", "/versions/14/tables/0/rows/3/state": "Handler registered; conditions apply", "/versions/14/tables/0/rows/4/state": "Handler registered; conditions apply", "/versions/14/tables/0/rows/5/state": "Handler registered; conditions apply", "/versions/14/tables/0/rows/6/state": "Handler registered; conditions apply", "/versions/14/tables/0/rows/7/state": "Handler registered; conditions apply", "/versions/14/tables/0/rows/8/state": "Handler registered; conditions apply", "/versions/14/tables/0/rows/9/state": "Handler registered; conditions apply", "/versions/14/tables/0/rows/10/state": "Handler registered; conditions apply", "/versions/14/sections/0/paragraphs/0": "The matrix records callbacks actually registered in this source build. Registration identifies an implemented interface hook; options, query shape, privileges and provider rules determine whether an operation is allowed.", "/versions/14/sections/0/paragraphs/1": "The complete same-version manual below retains configuration, constraints and examples. No runtime capability test is claimed.", "/versions/14/sections/1/paragraphs/0": "This inventory starts with the Table AM interface in PostgreSQL 12. Earlier PostgreSQL heap storage is not relabeled as a Table AM implementation.", "/versions/14/sections/1/paragraphs/1": "Heap visibility follows PostgreSQL snapshots. WAL and crash-recovery behavior depend on relation persistence; temporary and unlogged tables differ from permanent tables. Index access methods remain separate from the table storage interface.", "/versions/14/tables/0/rows/0/feature": "Tuple slot", "/versions/14/tables/0/rows/1/feature": "Begin scan", "/versions/14/tables/0/rows/2/feature": "Parallel scan initialization", "/versions/14/tables/0/rows/3/feature": "Begin index lookup", "/versions/14/tables/0/rows/4/feature": "Fetch identified tuple", "/versions/14/tables/0/rows/5/feature": "Insert tuple", "/versions/14/tables/0/rows/6/feature": "Update tuple", "/versions/14/tables/0/rows/7/feature": "Delete tuple", "/versions/14/tables/0/rows/8/feature": "Vacuum relation", "/versions/14/tables/0/rows/9/feature": "Analyze block", "/versions/14/tables/0/columns/0/label": "Interface operation", "/versions/14/tables/0/columns/1/label": "Source observation", "/versions/14/tables/0/columns/2/label": "Callback", "/versions/14/tables/0/columns/3/label": "Implementation", "/versions/14/tables/0/rows/10/feature": "TOAST decision"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "19f27da0dd95d5a4ca75384201d11d2779ab7c8190ffe696ff56f60c24a62285", "canonical_center_text_hash": "45fb76963262ca49eabaeb2f27f4441e920895a4a0bc60312116ec9097c386fc"}, "evidence_kind": "source and documentation", "description_zh": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002", "comparison_data": {"options": [], "callbacks": {"scan_end": "heap_endscan", "scan_begin": "heap_beginscan", "tuple_lock": "heapam_tuple_lock", "scan_rescan": "heap_rescan", "multi_insert": "heap_multi_insert", "tuple_delete": "heapam_tuple_delete", "tuple_insert": "heapam_tuple_insert", "tuple_update": "heapam_tuple_update", "relation_size": "table_block_relation_size", "slot_callbacks": "heapam_slot_callbacks", "index_fetch_end": "heapam_index_fetch_end", "relation_vacuum": "heap_vacuum_rel", "tuple_tid_valid": "heapam_tuple_tid_valid", "scan_getnextslot": "heap_getnextslot", "index_fetch_begin": "heapam_index_fetch_begin", "index_fetch_reset": "heapam_index_fetch_reset", "index_fetch_tuple": "heapam_index_fetch_tuple", "relation_toast_am": "heapam_relation_toast_am", "scan_set_tidrange": "heap_set_tidrange", "relation_copy_data": "heapam_relation_copy_data", "index_delete_tuples": "heap_index_delete_tuples", "index_validate_scan": "heapam_index_validate_scan", "tuple_get_latest_tid": "heap_get_latest_tid", "parallelscan_estimate": "table_block_parallelscan_estimate", "index_build_range_scan": "heapam_index_build_range_scan", "relation_estimate_size": "heapam_estimate_rel_size", "scan_bitmap_next_block": "heapam_scan_bitmap_next_block", "scan_bitmap_next_tuple": "heapam_scan_bitmap_next_tuple", "scan_sample_next_block": "heapam_scan_sample_next_block", "scan_sample_next_tuple": "heapam_scan_sample_next_tuple", "parallelscan_initialize": "table_block_parallelscan_initialize", "scan_analyze_next_block": "heapam_scan_analyze_next_block", "scan_analyze_next_tuple": "heapam_scan_analyze_next_tuple", "tuple_fetch_row_version": "heapam_fetch_row_version", "tuple_insert_speculative": "heapam_tuple_insert_speculative", "tuple_satisfies_snapshot": "heapam_tuple_satisfies_snapshot", "parallelscan_reinitialize": "table_block_parallelscan_reinitialize", "relation_copy_for_cluster": "heapam_relation_copy_for_cluster", "relation_set_new_filenode": "heapam_relation_set_new_filenode", "scan_getnextslot_tidrange": "heap_getnextslot_tidrange", "relation_fetch_toast_slice": "heap_fetch_toast_slice", "relation_needs_toast_table": "heapam_relation_needs_toast_table", "tuple_complete_speculative": "heapam_tuple_complete_speculative", "relation_nontransactional_truncate": "heapam_relation_nontransactional_truncate"}, "source_options": [], "protocol_versions": {}}, "comparison_hash": "eee603c9509a489abd6ec6a12129951277b59ad8334e2edc6299d8edd5fa0e38", "manual_language": "zh", "runtime_verified": false, "description_zh_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span>PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em>\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a href=\"/zh/docs/14/catalog-pg-am.html\" rel=\"nofollow\"><code>pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code>pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em>\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a href=\"/zh/docs/14/sql-create-access-method.html\" rel=\"nofollow\"><span>CREATE ACCESS METHOD</span></a> \u548c <a href=\"/zh/docs/14/sql-drop-access-method.html\" rel=\"nofollow\"><span>DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code>internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code>table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 <code>static const</code> \u53d8\u91cf\u6765\u5b9e\u73b0\u3002<code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 <em>API \u7ed3\u6784\u4f53</em>\uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/access/tableam.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/access/tableam.h</code></a> \u6587\u4ef6\u3002\n </p><p>\n  \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd <acronym>AM</acronym> \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/executor/tuptable.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/executor/tuptable.h</code></a>\uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002\n </p><p><a href=\"/zh/docs/14/tableam.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>"}, "15": {"facts": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "44"}], "tables": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "related": [{"url": "/wiki/catalog/pg_am/?v=15", "label": "\u7cfb\u7edf\u76ee\u5f55 pg_am"}, {"url": "/wiki/guc/default_table_access_method/?v=15", "label": "default_table_access_method"}, {"url": "/wiki/indexam/?v=15", "label": "\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5"}], "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": "/docs/15/tableam.html", "path": "tableam.html", "label": "PostgreSQL 15 English manual", "sha256": "5ee4097a59afae0117b872700e0a36e63b92fdbefd8a1cc59fd2d77dee35dcc3"}, {"url": "https://ftp.postgresql.org/pub/source/v15.19/postgresql-15.19.tar.bz2", "line": 2538, "path": "src/backend/access/heap/heapam_handler.c", "label": "src/backend/access/heap/heapam_handler.c:2538", "sha256": "defee509717f844e43f49497885213030e3bbf0c4f94ea9706605db9d74effe4", "archive_sha256": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}, {"url": "/docs/15/mvcc-intro.html", "path": "mvcc-intro.html", "label": "PostgreSQL 15 English manual", "sha256": "560c3702c5ba7ce54cd9ab5c0b7548859fa73c2bc1e560a5cb12955a34d550b9"}, {"url": "/docs/15/sql-createtable.html", "path": "sql-createtable.html", "label": "PostgreSQL 15 English manual", "sha256": "dcb246be9d6131c7227ccde6745458865a0c97ac4c8891c2cbea73a30769d6df"}, {"url": "/docs/15/routine-vacuuming.html", "path": "routine-vacuuming.html", "label": "PostgreSQL 15 English manual", "sha256": "ea4f9434e9f615892aec6bdd734639a8f68968e7e5a447a7819ed64936602def"}, {"url": "/docs/15/catalog-pg-am.html", "path": "catalog-pg-am.html", "label": "PostgreSQL 15 English manual", "sha256": "afaeb26977cb9fa6503500d6eff1bc108f5ac76cc80185345bcde2b8e39c9c93"}], "zh_from": {"kind": "same-version-chinese-manual-with-source-derived-identity", "manual": {"url": "/zh/docs/15/tableam.html", "anchor": "", "locale": "zh-Hans", "version": "15", "build_id": 101, "page_key": "tableam.html", "extraction": "concept-introduction", "source_hash": "5297a01b6bcdc65780cb556564c0e0a270ef4c695b355ff9c11d96d7a9f6fcaa", "fragment_sha256": "79df6d3263cc9d0468c5f852853d0288d7fc4761ddc4d792649cc35262f91553", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:6bce1a2df9170cb1146a1411c5547190856638221a6539e618ee1016c9f493ad", "translated_from_revision": null}, "body_sha256": "73ef7fb65ed7c0f1ff1b6e6c944b8bf9a0e0508ed2a2663af3a63c915390d835", "runtime_rerun": false, "authored_translation": "source-derived-identity", "source_facts_revision": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}, "facts_zh": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "44"}], "sections": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filenode = heapam_relation_set_new_filenode,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_block = heapam_scan_bitmap_next_block,\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "callbacks": {"scan_end": "heap_endscan", "scan_begin": "heap_beginscan", "tuple_lock": "heapam_tuple_lock", "scan_rescan": "heap_rescan", "multi_insert": "heap_multi_insert", "tuple_delete": "heapam_tuple_delete", "tuple_insert": "heapam_tuple_insert", "tuple_update": "heapam_tuple_update", "relation_size": "table_block_relation_size", "slot_callbacks": "heapam_slot_callbacks", "index_fetch_end": "heapam_index_fetch_end", "relation_vacuum": "heap_vacuum_rel", "tuple_tid_valid": "heapam_tuple_tid_valid", "scan_getnextslot": "heap_getnextslot", "index_fetch_begin": "heapam_index_fetch_begin", "index_fetch_reset": "heapam_index_fetch_reset", "index_fetch_tuple": "heapam_index_fetch_tuple", "relation_toast_am": "heapam_relation_toast_am", "scan_set_tidrange": "heap_set_tidrange", "relation_copy_data": "heapam_relation_copy_data", "index_delete_tuples": "heap_index_delete_tuples", "index_validate_scan": "heapam_index_validate_scan", "tuple_get_latest_tid": "heap_get_latest_tid", "parallelscan_estimate": "table_block_parallelscan_estimate", "index_build_range_scan": "heapam_index_build_range_scan", "relation_estimate_size": "heapam_estimate_rel_size", "scan_bitmap_next_block": "heapam_scan_bitmap_next_block", "scan_bitmap_next_tuple": "heapam_scan_bitmap_next_tuple", "scan_sample_next_block": "heapam_scan_sample_next_block", "scan_sample_next_tuple": "heapam_scan_sample_next_tuple", "parallelscan_initialize": "table_block_parallelscan_initialize", "scan_analyze_next_block": "heapam_scan_analyze_next_block", "scan_analyze_next_tuple": "heapam_scan_analyze_next_tuple", "tuple_fetch_row_version": "heapam_fetch_row_version", "tuple_insert_speculative": "heapam_tuple_insert_speculative", "tuple_satisfies_snapshot": "heapam_tuple_satisfies_snapshot", "parallelscan_reinitialize": "table_block_parallelscan_reinitialize", "relation_copy_for_cluster": "heapam_relation_copy_for_cluster", "relation_set_new_filenode": "heapam_relation_set_new_filenode", "scan_getnextslot_tidrange": "heap_getnextslot_tidrange", "relation_fetch_toast_slice": "heap_fetch_toast_slice", "relation_needs_toast_table": "heapam_relation_needs_toast_table", "tuple_complete_speculative": "heapam_tuple_complete_speculative", "relation_nontransactional_truncate": "heapam_relation_nontransactional_truncate"}, "center_zh": {"title": "Core table AM", "locale": "zh-Hans", "source": {"key": "heap", "locale": "zh-Hans", "version": "15", "text_hash": "1c4c152e65b074e382ab5f06608b265b9cf717fe14540c7e6a601641a97cd504", "collection": "tableam", "dataset_hash": "7c31b524dfe136022d39a6ae8dcfac6b3bbd5f8fdaf422536599981252aff0c9", "source_database": "center", "source_revision": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}, "payload": {"facts": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "44"}], "tables": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "zh_from": {"kind": "same-version-chinese-manual-with-source-derived-identity", "manual": {"url": "/zh/docs/15/tableam.html", "anchor": "", "locale": "zh-Hans", "version": "15", "build_id": 101, "page_key": "tableam.html", "extraction": "concept-introduction", "source_hash": "5297a01b6bcdc65780cb556564c0e0a270ef4c695b355ff9c11d96d7a9f6fcaa", "fragment_sha256": "79df6d3263cc9d0468c5f852853d0288d7fc4761ddc4d792649cc35262f91553", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:6bce1a2df9170cb1146a1411c5547190856638221a6539e618ee1016c9f493ad", "translated_from_revision": null}, "body_sha256": "73ef7fb65ed7c0f1ff1b6e6c944b8bf9a0e0508ed2a2663af3a63c915390d835", "runtime_rerun": false, "authored_translation": "source-derived-identity", "source_facts_revision": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}, "sections": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filenode = heapam_relation_set_new_filenode,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_block = heapam_scan_bitmap_next_block,\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "description_zh": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002", "description_zh_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span class=\"productname\">PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em class=\"firstterm\">\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a class=\"link\" href=\"/zh/docs/15/catalog-pg-am.html\"><code class=\"structname\">pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code class=\"structname\">pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em class=\"firstterm\">\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a class=\"xref\" href=\"/zh/docs/15/sql-create-access-method.html\"><span class=\"refentrytitle\">CREATE ACCESS METHOD</span></a> \u548c <a class=\"xref\" href=\"/zh/docs/15/sql-drop-access-method.html\"><span class=\"refentrytitle\">DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code class=\"type\">internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code class=\"type\">table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 <code class=\"structname\">TableAmRoutine</code> \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 <code class=\"literal\">static const</code> \u53d8\u91cf\u6765\u5b9e\u73b0\u3002<code class=\"structname\">TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 <em class=\"firstterm\">API \u7ed3\u6784\u4f53</em>\uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 <code class=\"structname\">TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605\n  <a class=\"ulink\" href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/access/tableam.h;hb=HEAD\">\n<code class=\"filename\">src/include/access/tableam.h</code></a> \u6587\u4ef6\u3002\n </p><p>\n  \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd <acronym class=\"acronym\">AM</acronym> \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1\n  <a class=\"ulink\" href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/executor/tuptable.h;hb=HEAD\">\n<code class=\"filename\">src/include/executor/tuptable.h</code></a>\uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002\n </p><p><a href=\"/zh/docs/15/tableam.html\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>"}, "summary": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002", "version": "15", "link_map": {"/zh/docs/15/tableam.html": "/docs/15/tableam.html", "/zh/docs/15/catalog-pg-am.html": "/docs/15/catalog-pg-am.html", "/zh/docs/15/sql-drop-access-method.html": "/docs/15/sql-drop-access-method.html", "/zh/docs/15/sql-create-access-method.html": "/docs/15/sql-create-access-method.html"}, "body_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span>PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em>\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a href=\"/zh/docs/15/catalog-pg-am.html\" rel=\"nofollow\"><code>pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code>pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em>\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a href=\"/zh/docs/15/sql-create-access-method.html\" rel=\"nofollow\"><span>CREATE ACCESS METHOD</span></a> \u548c <a href=\"/zh/docs/15/sql-drop-access-method.html\" rel=\"nofollow\"><span>DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code>internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code>table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 <code>static const</code> \u53d8\u91cf\u6765\u5b9e\u73b0\u3002<code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 <em>API \u7ed3\u6784\u4f53</em>\uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/access/tableam.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/access/tableam.h</code></a> \u6587\u4ef6\u3002\n </p><p>\n  \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd <acronym>AM</acronym> \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/executor/tuptable.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/executor/tuptable.h</code></a>\uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002\n </p><p><a href=\"/zh/docs/15/tableam.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>", "body_sha256": "15e0b405f8770491c65fff6896714bdbc16107970a4cef7bce65a4b336ef170c", "content_hash": "1c4c152e65b074e382ab5f06608b265b9cf717fe14540c7e6a601641a97cd504", "source_database": "center", "source_revision": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}, "tables_zh": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "description": ["\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002"], "manual_html": "", "manual_path": "/docs/15/tableam.html", "sections_zh": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filenode = heapam_relation_set_new_filenode,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_block = heapam_scan_bitmap_next_block,\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "localization": {"status": "complete", "sources": [{"url": "/docs/15/tableam.html", "method": "same-major semantic node", "sha256": "003870ea971f3df488358bb9e59e85b1ccd4aabb5022b51491d2eaf0c1810391", "language": "zh", "matched_nodes": ["#TABLEAM/p[10]", "#TABLEAM/p[3]", "#TABLEAM/p[4]", "#TABLEAM/p[5]", "#TABLEAM/p[7]", "#TABLEAM/p[9]"]}], "language": "zh", "original_text": {"/versions/15/description/0": "The built-in heap table access method integrates tuple storage, visibility, scans, index fetches and maintenance with PostgreSQL.", "/versions/15/facts/0/label": "Interface family", "/versions/15/facts/0/value": "Table access method", "/versions/15/facts/1/label": "Handler or routine", "/versions/15/facts/2/label": "Recorded callbacks", "/versions/15/tables/0/title": "Registered interface handlers", "/versions/15/related/0/label": "System catalog pg_am", "/versions/15/related/2/label": "Index AM", "/versions/15/sections/0/title": "Interface and capability boundaries", "/versions/15/sections/1/title": "Heap storage, visibility and WAL", "/versions/15/sections/2/title": "Registered implementation in core source", "/versions/15/tables/0/rows/0/state": "Handler registered; conditions apply", "/versions/15/tables/0/rows/1/state": "Handler registered; conditions apply", "/versions/15/tables/0/rows/2/state": "Handler registered; conditions apply", "/versions/15/tables/0/rows/3/state": "Handler registered; conditions apply", "/versions/15/tables/0/rows/4/state": "Handler registered; conditions apply", "/versions/15/tables/0/rows/5/state": "Handler registered; conditions apply", "/versions/15/tables/0/rows/6/state": "Handler registered; conditions apply", "/versions/15/tables/0/rows/7/state": "Handler registered; conditions apply", "/versions/15/tables/0/rows/8/state": "Handler registered; conditions apply", "/versions/15/tables/0/rows/9/state": "Handler registered; conditions apply", "/versions/15/tables/0/rows/10/state": "Handler registered; conditions apply", "/versions/15/sections/0/paragraphs/0": "The matrix records callbacks actually registered in this source build. Registration identifies an implemented interface hook; options, query shape, privileges and provider rules determine whether an operation is allowed.", "/versions/15/sections/0/paragraphs/1": "The complete same-version manual below retains configuration, constraints and examples. No runtime capability test is claimed.", "/versions/15/sections/1/paragraphs/0": "This inventory starts with the Table AM interface in PostgreSQL 12. Earlier PostgreSQL heap storage is not relabeled as a Table AM implementation.", "/versions/15/sections/1/paragraphs/1": "Heap visibility follows PostgreSQL snapshots. WAL and crash-recovery behavior depend on relation persistence; temporary and unlogged tables differ from permanent tables. Index access methods remain separate from the table storage interface.", "/versions/15/tables/0/rows/0/feature": "Tuple slot", "/versions/15/tables/0/rows/1/feature": "Begin scan", "/versions/15/tables/0/rows/2/feature": "Parallel scan initialization", "/versions/15/tables/0/rows/3/feature": "Begin index lookup", "/versions/15/tables/0/rows/4/feature": "Fetch identified tuple", "/versions/15/tables/0/rows/5/feature": "Insert tuple", "/versions/15/tables/0/rows/6/feature": "Update tuple", "/versions/15/tables/0/rows/7/feature": "Delete tuple", "/versions/15/tables/0/rows/8/feature": "Vacuum relation", "/versions/15/tables/0/rows/9/feature": "Analyze block", "/versions/15/tables/0/columns/0/label": "Interface operation", "/versions/15/tables/0/columns/1/label": "Source observation", "/versions/15/tables/0/columns/2/label": "Callback", "/versions/15/tables/0/columns/3/label": "Implementation", "/versions/15/tables/0/rows/10/feature": "TOAST decision"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "3c255a06f1775bc2fdd3347af22f1dd65602a0856c92c828752539ef3d5d31dd", "canonical_center_text_hash": "1c4c152e65b074e382ab5f06608b265b9cf717fe14540c7e6a601641a97cd504"}, "evidence_kind": "source and documentation", "description_zh": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002", "comparison_data": {"options": [], "callbacks": {"scan_end": "heap_endscan", "scan_begin": "heap_beginscan", "tuple_lock": "heapam_tuple_lock", "scan_rescan": "heap_rescan", "multi_insert": "heap_multi_insert", "tuple_delete": "heapam_tuple_delete", "tuple_insert": "heapam_tuple_insert", "tuple_update": "heapam_tuple_update", "relation_size": "table_block_relation_size", "slot_callbacks": "heapam_slot_callbacks", "index_fetch_end": "heapam_index_fetch_end", "relation_vacuum": "heap_vacuum_rel", "tuple_tid_valid": "heapam_tuple_tid_valid", "scan_getnextslot": "heap_getnextslot", "index_fetch_begin": "heapam_index_fetch_begin", "index_fetch_reset": "heapam_index_fetch_reset", "index_fetch_tuple": "heapam_index_fetch_tuple", "relation_toast_am": "heapam_relation_toast_am", "scan_set_tidrange": "heap_set_tidrange", "relation_copy_data": "heapam_relation_copy_data", "index_delete_tuples": "heap_index_delete_tuples", "index_validate_scan": "heapam_index_validate_scan", "tuple_get_latest_tid": "heap_get_latest_tid", "parallelscan_estimate": "table_block_parallelscan_estimate", "index_build_range_scan": "heapam_index_build_range_scan", "relation_estimate_size": "heapam_estimate_rel_size", "scan_bitmap_next_block": "heapam_scan_bitmap_next_block", "scan_bitmap_next_tuple": "heapam_scan_bitmap_next_tuple", "scan_sample_next_block": "heapam_scan_sample_next_block", "scan_sample_next_tuple": "heapam_scan_sample_next_tuple", "parallelscan_initialize": "table_block_parallelscan_initialize", "scan_analyze_next_block": "heapam_scan_analyze_next_block", "scan_analyze_next_tuple": "heapam_scan_analyze_next_tuple", "tuple_fetch_row_version": "heapam_fetch_row_version", "tuple_insert_speculative": "heapam_tuple_insert_speculative", "tuple_satisfies_snapshot": "heapam_tuple_satisfies_snapshot", "parallelscan_reinitialize": "table_block_parallelscan_reinitialize", "relation_copy_for_cluster": "heapam_relation_copy_for_cluster", "relation_set_new_filenode": "heapam_relation_set_new_filenode", "scan_getnextslot_tidrange": "heap_getnextslot_tidrange", "relation_fetch_toast_slice": "heap_fetch_toast_slice", "relation_needs_toast_table": "heapam_relation_needs_toast_table", "tuple_complete_speculative": "heapam_tuple_complete_speculative", "relation_nontransactional_truncate": "heapam_relation_nontransactional_truncate"}, "source_options": [], "protocol_versions": {}}, "comparison_hash": "eee603c9509a489abd6ec6a12129951277b59ad8334e2edc6299d8edd5fa0e38", "manual_language": "zh", "runtime_verified": false, "description_zh_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span>PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em>\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a href=\"/zh/docs/15/catalog-pg-am.html\" rel=\"nofollow\"><code>pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code>pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em>\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a href=\"/zh/docs/15/sql-create-access-method.html\" rel=\"nofollow\"><span>CREATE ACCESS METHOD</span></a> \u548c <a href=\"/zh/docs/15/sql-drop-access-method.html\" rel=\"nofollow\"><span>DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code>internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code>table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 <code>static const</code> \u53d8\u91cf\u6765\u5b9e\u73b0\u3002<code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 <em>API \u7ed3\u6784\u4f53</em>\uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/access/tableam.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/access/tableam.h</code></a> \u6587\u4ef6\u3002\n </p><p>\n  \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd <acronym>AM</acronym> \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/executor/tuptable.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/executor/tuptable.h</code></a>\uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002\n </p><p><a href=\"/zh/docs/15/tableam.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>"}, "16": {"facts": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "44"}], "tables": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "related": [{"url": "/wiki/catalog/pg_am/?v=16", "label": "\u7cfb\u7edf\u76ee\u5f55 pg_am"}, {"url": "/wiki/guc/default_table_access_method/?v=16", "label": "default_table_access_method"}, {"url": "/wiki/indexam/?v=16", "label": "\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5"}], "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": "/docs/16/tableam.html", "path": "tableam.html", "label": "PostgreSQL 16 English manual", "sha256": "de4f87f56c28dceda7f0cd9d1cd06d4d743e8d40f0e0c678de9a124620fe60e8"}, {"url": "https://ftp.postgresql.org/pub/source/v16.15/postgresql-16.15.tar.bz2", "line": 2545, "path": "src/backend/access/heap/heapam_handler.c", "label": "src/backend/access/heap/heapam_handler.c:2545", "sha256": "098e4c2edc2b72869ca506104e38765eb11a5c9f84c018f932acc86a355c0749", "archive_sha256": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}, {"url": "/docs/16/mvcc-intro.html", "path": "mvcc-intro.html", "label": "PostgreSQL 16 English manual", "sha256": "44ad702b3a2801b752f632abc5637a121f19d3dec107beedd3ae430b47efed70"}, {"url": "/docs/16/sql-createtable.html", "path": "sql-createtable.html", "label": "PostgreSQL 16 English manual", "sha256": "dde6108abda6f7358eeccc6867eb68f5ca601329ea3f50bc3d5b728c944a65a8"}, {"url": "/docs/16/routine-vacuuming.html", "path": "routine-vacuuming.html", "label": "PostgreSQL 16 English manual", "sha256": "776a9e2655314bbdc3f689ca444ddac910ab2dc352aec54b102481846d1f1777"}, {"url": "/docs/16/catalog-pg-am.html", "path": "catalog-pg-am.html", "label": "PostgreSQL 16 English manual", "sha256": "596022bb02bdc457528b9821745971fc926674d3ee14dd5d91afb387b927844c"}], "zh_from": {"kind": "same-version-chinese-manual-with-source-derived-identity", "manual": {"url": "/zh/docs/16/tableam.html", "anchor": "", "locale": "zh-Hans", "version": "16", "build_id": 103, "page_key": "tableam.html", "extraction": "concept-introduction", "source_hash": "66680ba10ed676afaf917bb5b2e117ec7e59636ddd8d295d25ab06884df494cc", "fragment_sha256": "0bb7749aa45b7df5bbf6ff8117fceecced93692dc7a4dfce42a56295751e48b8", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:80579a071736780f9c4022bb5148e1fb1256f1a33591306af67816e9e9bf3a9b", "translated_from_revision": null}, "body_sha256": "7c38cf3ada22e3b93f6bf816ae72652dffc5c47ac4e2abbc2cf2922062056648", "runtime_rerun": false, "authored_translation": "source-derived-identity", "source_facts_revision": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}, "facts_zh": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "44"}], "sections": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filelocator = heapam_relation_set_new_filelocator,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_block = heapam_scan_bitmap_next_block,\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "callbacks": {"scan_end": "heap_endscan", "scan_begin": "heap_beginscan", "tuple_lock": "heapam_tuple_lock", "scan_rescan": "heap_rescan", "multi_insert": "heap_multi_insert", "tuple_delete": "heapam_tuple_delete", "tuple_insert": "heapam_tuple_insert", "tuple_update": "heapam_tuple_update", "relation_size": "table_block_relation_size", "slot_callbacks": "heapam_slot_callbacks", "index_fetch_end": "heapam_index_fetch_end", "relation_vacuum": "heap_vacuum_rel", "tuple_tid_valid": "heapam_tuple_tid_valid", "scan_getnextslot": "heap_getnextslot", "index_fetch_begin": "heapam_index_fetch_begin", "index_fetch_reset": "heapam_index_fetch_reset", "index_fetch_tuple": "heapam_index_fetch_tuple", "relation_toast_am": "heapam_relation_toast_am", "scan_set_tidrange": "heap_set_tidrange", "relation_copy_data": "heapam_relation_copy_data", "index_delete_tuples": "heap_index_delete_tuples", "index_validate_scan": "heapam_index_validate_scan", "tuple_get_latest_tid": "heap_get_latest_tid", "parallelscan_estimate": "table_block_parallelscan_estimate", "index_build_range_scan": "heapam_index_build_range_scan", "relation_estimate_size": "heapam_estimate_rel_size", "scan_bitmap_next_block": "heapam_scan_bitmap_next_block", "scan_bitmap_next_tuple": "heapam_scan_bitmap_next_tuple", "scan_sample_next_block": "heapam_scan_sample_next_block", "scan_sample_next_tuple": "heapam_scan_sample_next_tuple", "parallelscan_initialize": "table_block_parallelscan_initialize", "scan_analyze_next_block": "heapam_scan_analyze_next_block", "scan_analyze_next_tuple": "heapam_scan_analyze_next_tuple", "tuple_fetch_row_version": "heapam_fetch_row_version", "tuple_insert_speculative": "heapam_tuple_insert_speculative", "tuple_satisfies_snapshot": "heapam_tuple_satisfies_snapshot", "parallelscan_reinitialize": "table_block_parallelscan_reinitialize", "relation_copy_for_cluster": "heapam_relation_copy_for_cluster", "scan_getnextslot_tidrange": "heap_getnextslot_tidrange", "relation_fetch_toast_slice": "heap_fetch_toast_slice", "relation_needs_toast_table": "heapam_relation_needs_toast_table", "tuple_complete_speculative": "heapam_tuple_complete_speculative", "relation_set_new_filelocator": "heapam_relation_set_new_filelocator", "relation_nontransactional_truncate": "heapam_relation_nontransactional_truncate"}, "center_zh": {"title": "Core table AM", "locale": "zh-Hans", "source": {"key": "heap", "locale": "zh-Hans", "version": "16", "text_hash": "8abf938cccd60187a9e6c02bf468c7454b90af6ac0f7e53b519a7fd7949bd776", "collection": "tableam", "dataset_hash": "7c31b524dfe136022d39a6ae8dcfac6b3bbd5f8fdaf422536599981252aff0c9", "source_database": "center", "source_revision": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}, "payload": {"facts": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "44"}], "tables": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "zh_from": {"kind": "same-version-chinese-manual-with-source-derived-identity", "manual": {"url": "/zh/docs/16/tableam.html", "anchor": "", "locale": "zh-Hans", "version": "16", "build_id": 103, "page_key": "tableam.html", "extraction": "concept-introduction", "source_hash": "66680ba10ed676afaf917bb5b2e117ec7e59636ddd8d295d25ab06884df494cc", "fragment_sha256": "0bb7749aa45b7df5bbf6ff8117fceecced93692dc7a4dfce42a56295751e48b8", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:80579a071736780f9c4022bb5148e1fb1256f1a33591306af67816e9e9bf3a9b", "translated_from_revision": null}, "body_sha256": "7c38cf3ada22e3b93f6bf816ae72652dffc5c47ac4e2abbc2cf2922062056648", "runtime_rerun": false, "authored_translation": "source-derived-identity", "source_facts_revision": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}, "sections": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filelocator = heapam_relation_set_new_filelocator,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_block = heapam_scan_bitmap_next_block,\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "description_zh": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002", "description_zh_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span class=\"productname\">PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em class=\"firstterm\">\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a class=\"link\" href=\"/zh/docs/16/catalog-pg-am.html\"><code class=\"structname\">pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code class=\"structname\">pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em class=\"firstterm\">\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a class=\"xref\" href=\"/zh/docs/16/sql-create-access-method.html\"><span class=\"refentrytitle\">CREATE ACCESS METHOD</span></a> \u548c <a class=\"xref\" href=\"/zh/docs/16/sql-drop-access-method.html\"><span class=\"refentrytitle\">DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code class=\"type\">internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code class=\"type\">table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 <code class=\"structname\">TableAmRoutine</code> \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 <code class=\"literal\">static const</code> \u53d8\u91cf\u6765\u5b9e\u73b0\u3002<code class=\"structname\">TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 <em class=\"firstterm\">API \u7ed3\u6784\u4f53</em>\uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 <code class=\"structname\">TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605\n  <a class=\"ulink\" href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/access/tableam.h;hb=HEAD\">\n<code class=\"filename\">src/include/access/tableam.h</code></a> \u6587\u4ef6\u3002\n </p><p>\n  \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd <acronym class=\"acronym\">AM</acronym> \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1\n  <a class=\"ulink\" href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/executor/tuptable.h;hb=HEAD\">\n<code class=\"filename\">src/include/executor/tuptable.h</code></a>\uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002\n </p><p><a href=\"/zh/docs/16/tableam.html\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>"}, "summary": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002", "version": "16", "link_map": {"/zh/docs/16/tableam.html": "/docs/16/tableam.html", "/zh/docs/16/catalog-pg-am.html": "/docs/16/catalog-pg-am.html", "/zh/docs/16/sql-drop-access-method.html": "/docs/16/sql-drop-access-method.html", "/zh/docs/16/sql-create-access-method.html": "/docs/16/sql-create-access-method.html"}, "body_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span>PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em>\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a href=\"/zh/docs/16/catalog-pg-am.html\" rel=\"nofollow\"><code>pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code>pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em>\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a href=\"/zh/docs/16/sql-create-access-method.html\" rel=\"nofollow\"><span>CREATE ACCESS METHOD</span></a> \u548c <a href=\"/zh/docs/16/sql-drop-access-method.html\" rel=\"nofollow\"><span>DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code>internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code>table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 <code>static const</code> \u53d8\u91cf\u6765\u5b9e\u73b0\u3002<code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 <em>API \u7ed3\u6784\u4f53</em>\uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/access/tableam.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/access/tableam.h</code></a> \u6587\u4ef6\u3002\n </p><p>\n  \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd <acronym>AM</acronym> \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/executor/tuptable.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/executor/tuptable.h</code></a>\uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002\n </p><p><a href=\"/zh/docs/16/tableam.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>", "body_sha256": "8a1f9d2ea5787093d7ce9fc4d837d5f0192506daf5235be4143ba5e313ee2a28", "content_hash": "8abf938cccd60187a9e6c02bf468c7454b90af6ac0f7e53b519a7fd7949bd776", "source_database": "center", "source_revision": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}, "tables_zh": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "description": ["\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002"], "manual_html": "", "manual_path": "/docs/16/tableam.html", "sections_zh": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filelocator = heapam_relation_set_new_filelocator,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_block = heapam_scan_bitmap_next_block,\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "localization": {"status": "complete", "sources": [{"url": "/docs/16/tableam.html", "method": "same-major semantic node", "sha256": "00d4d7ce2a226005787acdea4183d3b8d54bbe9d468e19070e2e9d121f4eac4b", "language": "zh", "matched_nodes": ["#TABLEAM/p[10]", "#TABLEAM/p[3]", "#TABLEAM/p[4]", "#TABLEAM/p[5]", "#TABLEAM/p[7]", "#TABLEAM/p[9]"]}], "language": "zh", "original_text": {"/versions/16/description/0": "The built-in heap table access method integrates tuple storage, visibility, scans, index fetches and maintenance with PostgreSQL.", "/versions/16/facts/0/label": "Interface family", "/versions/16/facts/0/value": "Table access method", "/versions/16/facts/1/label": "Handler or routine", "/versions/16/facts/2/label": "Recorded callbacks", "/versions/16/tables/0/title": "Registered interface handlers", "/versions/16/related/0/label": "System catalog pg_am", "/versions/16/related/2/label": "Index AM", "/versions/16/sections/0/title": "Interface and capability boundaries", "/versions/16/sections/1/title": "Heap storage, visibility and WAL", "/versions/16/sections/2/title": "Registered implementation in core source", "/versions/16/tables/0/rows/0/state": "Handler registered; conditions apply", "/versions/16/tables/0/rows/1/state": "Handler registered; conditions apply", "/versions/16/tables/0/rows/2/state": "Handler registered; conditions apply", "/versions/16/tables/0/rows/3/state": "Handler registered; conditions apply", "/versions/16/tables/0/rows/4/state": "Handler registered; conditions apply", "/versions/16/tables/0/rows/5/state": "Handler registered; conditions apply", "/versions/16/tables/0/rows/6/state": "Handler registered; conditions apply", "/versions/16/tables/0/rows/7/state": "Handler registered; conditions apply", "/versions/16/tables/0/rows/8/state": "Handler registered; conditions apply", "/versions/16/tables/0/rows/9/state": "Handler registered; conditions apply", "/versions/16/tables/0/rows/10/state": "Handler registered; conditions apply", "/versions/16/sections/0/paragraphs/0": "The matrix records callbacks actually registered in this source build. Registration identifies an implemented interface hook; options, query shape, privileges and provider rules determine whether an operation is allowed.", "/versions/16/sections/0/paragraphs/1": "The complete same-version manual below retains configuration, constraints and examples. No runtime capability test is claimed.", "/versions/16/sections/1/paragraphs/0": "This inventory starts with the Table AM interface in PostgreSQL 12. Earlier PostgreSQL heap storage is not relabeled as a Table AM implementation.", "/versions/16/sections/1/paragraphs/1": "Heap visibility follows PostgreSQL snapshots. WAL and crash-recovery behavior depend on relation persistence; temporary and unlogged tables differ from permanent tables. Index access methods remain separate from the table storage interface.", "/versions/16/tables/0/rows/0/feature": "Tuple slot", "/versions/16/tables/0/rows/1/feature": "Begin scan", "/versions/16/tables/0/rows/2/feature": "Parallel scan initialization", "/versions/16/tables/0/rows/3/feature": "Begin index lookup", "/versions/16/tables/0/rows/4/feature": "Fetch identified tuple", "/versions/16/tables/0/rows/5/feature": "Insert tuple", "/versions/16/tables/0/rows/6/feature": "Update tuple", "/versions/16/tables/0/rows/7/feature": "Delete tuple", "/versions/16/tables/0/rows/8/feature": "Vacuum relation", "/versions/16/tables/0/rows/9/feature": "Analyze block", "/versions/16/tables/0/columns/0/label": "Interface operation", "/versions/16/tables/0/columns/1/label": "Source observation", "/versions/16/tables/0/columns/2/label": "Callback", "/versions/16/tables/0/columns/3/label": "Implementation", "/versions/16/tables/0/rows/10/feature": "TOAST decision"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "1a9c8bbcbca0c856d83935c2f65b36c7894f29e81c4665321c1a53d4c71aaf30", "canonical_center_text_hash": "8abf938cccd60187a9e6c02bf468c7454b90af6ac0f7e53b519a7fd7949bd776"}, "evidence_kind": "source and documentation", "description_zh": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002", "comparison_data": {"options": [], "callbacks": {"scan_end": "heap_endscan", "scan_begin": "heap_beginscan", "tuple_lock": "heapam_tuple_lock", "scan_rescan": "heap_rescan", "multi_insert": "heap_multi_insert", "tuple_delete": "heapam_tuple_delete", "tuple_insert": "heapam_tuple_insert", "tuple_update": "heapam_tuple_update", "relation_size": "table_block_relation_size", "slot_callbacks": "heapam_slot_callbacks", "index_fetch_end": "heapam_index_fetch_end", "relation_vacuum": "heap_vacuum_rel", "tuple_tid_valid": "heapam_tuple_tid_valid", "scan_getnextslot": "heap_getnextslot", "index_fetch_begin": "heapam_index_fetch_begin", "index_fetch_reset": "heapam_index_fetch_reset", "index_fetch_tuple": "heapam_index_fetch_tuple", "relation_toast_am": "heapam_relation_toast_am", "scan_set_tidrange": "heap_set_tidrange", "relation_copy_data": "heapam_relation_copy_data", "index_delete_tuples": "heap_index_delete_tuples", "index_validate_scan": "heapam_index_validate_scan", "tuple_get_latest_tid": "heap_get_latest_tid", "parallelscan_estimate": "table_block_parallelscan_estimate", "index_build_range_scan": "heapam_index_build_range_scan", "relation_estimate_size": "heapam_estimate_rel_size", "scan_bitmap_next_block": "heapam_scan_bitmap_next_block", "scan_bitmap_next_tuple": "heapam_scan_bitmap_next_tuple", "scan_sample_next_block": "heapam_scan_sample_next_block", "scan_sample_next_tuple": "heapam_scan_sample_next_tuple", "parallelscan_initialize": "table_block_parallelscan_initialize", "scan_analyze_next_block": "heapam_scan_analyze_next_block", "scan_analyze_next_tuple": "heapam_scan_analyze_next_tuple", "tuple_fetch_row_version": "heapam_fetch_row_version", "tuple_insert_speculative": "heapam_tuple_insert_speculative", "tuple_satisfies_snapshot": "heapam_tuple_satisfies_snapshot", "parallelscan_reinitialize": "table_block_parallelscan_reinitialize", "relation_copy_for_cluster": "heapam_relation_copy_for_cluster", "scan_getnextslot_tidrange": "heap_getnextslot_tidrange", "relation_fetch_toast_slice": "heap_fetch_toast_slice", "relation_needs_toast_table": "heapam_relation_needs_toast_table", "tuple_complete_speculative": "heapam_tuple_complete_speculative", "relation_set_new_filelocator": "heapam_relation_set_new_filelocator", "relation_nontransactional_truncate": "heapam_relation_nontransactional_truncate"}, "source_options": [], "protocol_versions": {}}, "comparison_hash": "d129057b9afc0cb9f38d3137a9d84fd96a035ed851fab81db9903db8ab10aabd", "manual_language": "zh", "runtime_verified": false, "description_zh_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span>PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em>\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a href=\"/zh/docs/16/catalog-pg-am.html\" rel=\"nofollow\"><code>pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code>pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em>\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a href=\"/zh/docs/16/sql-create-access-method.html\" rel=\"nofollow\"><span>CREATE ACCESS METHOD</span></a> \u548c <a href=\"/zh/docs/16/sql-drop-access-method.html\" rel=\"nofollow\"><span>DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code>internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code>table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 <code>static const</code> \u53d8\u91cf\u6765\u5b9e\u73b0\u3002<code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 <em>API \u7ed3\u6784\u4f53</em>\uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/access/tableam.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/access/tableam.h</code></a> \u6587\u4ef6\u3002\n </p><p>\n  \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd <acronym>AM</acronym> \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/executor/tuptable.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/executor/tuptable.h</code></a>\uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002\n </p><p><a href=\"/zh/docs/16/tableam.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>"}, "17": {"facts": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "44"}], "tables": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "related": [{"url": "/wiki/catalog/pg_am/?v=17", "label": "\u7cfb\u7edf\u76ee\u5f55 pg_am"}, {"url": "/wiki/guc/default_table_access_method/?v=17", "label": "default_table_access_method"}, {"url": "/wiki/indexam/?v=17", "label": "\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5"}], "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": "/docs/17/tableam.html", "path": "tableam.html", "label": "PostgreSQL 17 English manual", "sha256": "fe8df94617712b5fe74fe0a46f7f72438e671e243b03a4fb68c5925a10c7aefe"}, {"url": "https://ftp.postgresql.org/pub/source/v17.11/postgresql-17.11.tar.bz2", "line": 2592, "path": "src/backend/access/heap/heapam_handler.c", "label": "src/backend/access/heap/heapam_handler.c:2592", "sha256": "c2cb15c279b21f71cb491ea1c6abf94479cb6a7166a341827bce308da56bccd4", "archive_sha256": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}, {"url": "/docs/17/mvcc-intro.html", "path": "mvcc-intro.html", "label": "PostgreSQL 17 English manual", "sha256": "0ccd499b03dc7f8e803e7682cff147929ae032ff893dcf4b36e66a4480ef0b9a"}, {"url": "/docs/17/sql-createtable.html", "path": "sql-createtable.html", "label": "PostgreSQL 17 English manual", "sha256": "97385c16a0ff155ad89fe616bb074bf0a8328bcb21f5e64a7a6a0a03ddb1f4ef"}, {"url": "/docs/17/routine-vacuuming.html", "path": "routine-vacuuming.html", "label": "PostgreSQL 17 English manual", "sha256": "2f7caa1e26c93613937e7a6f422db31839f7aae55ee5c97f7b8807ff6b544e38"}, {"url": "/docs/17/catalog-pg-am.html", "path": "catalog-pg-am.html", "label": "PostgreSQL 17 English manual", "sha256": "919e02926ce8d5b206bb575cb8a1c5f60b2eee3d06cd375c0891fc779802b798"}], "zh_from": {"kind": "same-version-chinese-manual-with-source-derived-identity", "manual": {"url": "/zh/docs/17/tableam.html", "anchor": "", "locale": "zh-Hans", "version": "17", "build_id": 105, "page_key": "tableam.html", "extraction": "concept-introduction", "source_hash": "1453a80805d646c7541c152dcfb6031856568e9a9f8e74f02aaf2eded5234b4f", "fragment_sha256": "fc00dd59458d98e2b48e131201814b0cc0f1b7793e85b13b04d68f97561919a4", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:7340767258d21c21b36f373f1fff6bab2be18e0daca13a865129db6105c09efd", "translated_from_revision": null}, "body_sha256": "26bd621c23f453ddbad35ad56b2ea27ab347ee05015ccb29d2458514424be3a6", "runtime_rerun": false, "authored_translation": "source-derived-identity", "source_facts_revision": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}, "facts_zh": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "44"}], "sections": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filelocator = heapam_relation_set_new_filelocator,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_block = heapam_scan_bitmap_next_block,\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "callbacks": {"scan_end": "heap_endscan", "scan_begin": "heap_beginscan", "tuple_lock": "heapam_tuple_lock", "scan_rescan": "heap_rescan", "multi_insert": "heap_multi_insert", "tuple_delete": "heapam_tuple_delete", "tuple_insert": "heapam_tuple_insert", "tuple_update": "heapam_tuple_update", "relation_size": "table_block_relation_size", "slot_callbacks": "heapam_slot_callbacks", "index_fetch_end": "heapam_index_fetch_end", "relation_vacuum": "heap_vacuum_rel", "tuple_tid_valid": "heapam_tuple_tid_valid", "scan_getnextslot": "heap_getnextslot", "index_fetch_begin": "heapam_index_fetch_begin", "index_fetch_reset": "heapam_index_fetch_reset", "index_fetch_tuple": "heapam_index_fetch_tuple", "relation_toast_am": "heapam_relation_toast_am", "scan_set_tidrange": "heap_set_tidrange", "relation_copy_data": "heapam_relation_copy_data", "index_delete_tuples": "heap_index_delete_tuples", "index_validate_scan": "heapam_index_validate_scan", "tuple_get_latest_tid": "heap_get_latest_tid", "parallelscan_estimate": "table_block_parallelscan_estimate", "index_build_range_scan": "heapam_index_build_range_scan", "relation_estimate_size": "heapam_estimate_rel_size", "scan_bitmap_next_block": "heapam_scan_bitmap_next_block", "scan_bitmap_next_tuple": "heapam_scan_bitmap_next_tuple", "scan_sample_next_block": "heapam_scan_sample_next_block", "scan_sample_next_tuple": "heapam_scan_sample_next_tuple", "parallelscan_initialize": "table_block_parallelscan_initialize", "scan_analyze_next_block": "heapam_scan_analyze_next_block", "scan_analyze_next_tuple": "heapam_scan_analyze_next_tuple", "tuple_fetch_row_version": "heapam_fetch_row_version", "tuple_insert_speculative": "heapam_tuple_insert_speculative", "tuple_satisfies_snapshot": "heapam_tuple_satisfies_snapshot", "parallelscan_reinitialize": "table_block_parallelscan_reinitialize", "relation_copy_for_cluster": "heapam_relation_copy_for_cluster", "scan_getnextslot_tidrange": "heap_getnextslot_tidrange", "relation_fetch_toast_slice": "heap_fetch_toast_slice", "relation_needs_toast_table": "heapam_relation_needs_toast_table", "tuple_complete_speculative": "heapam_tuple_complete_speculative", "relation_set_new_filelocator": "heapam_relation_set_new_filelocator", "relation_nontransactional_truncate": "heapam_relation_nontransactional_truncate"}, "center_zh": {"title": "Core table AM", "locale": "zh-Hans", "source": {"key": "heap", "locale": "zh-Hans", "version": "17", "text_hash": "57de0685f9d8a3fea89236c1fda8716cce54af6b06b2d840103053c421e9fd8f", "collection": "tableam", "dataset_hash": "7c31b524dfe136022d39a6ae8dcfac6b3bbd5f8fdaf422536599981252aff0c9", "source_database": "center", "source_revision": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}, "payload": {"facts": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "44"}], "tables": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "zh_from": {"kind": "same-version-chinese-manual-with-source-derived-identity", "manual": {"url": "/zh/docs/17/tableam.html", "anchor": "", "locale": "zh-Hans", "version": "17", "build_id": 105, "page_key": "tableam.html", "extraction": "concept-introduction", "source_hash": "1453a80805d646c7541c152dcfb6031856568e9a9f8e74f02aaf2eded5234b4f", "fragment_sha256": "fc00dd59458d98e2b48e131201814b0cc0f1b7793e85b13b04d68f97561919a4", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:7340767258d21c21b36f373f1fff6bab2be18e0daca13a865129db6105c09efd", "translated_from_revision": null}, "body_sha256": "26bd621c23f453ddbad35ad56b2ea27ab347ee05015ccb29d2458514424be3a6", "runtime_rerun": false, "authored_translation": "source-derived-identity", "source_facts_revision": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}, "sections": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filelocator = heapam_relation_set_new_filelocator,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_block = heapam_scan_bitmap_next_block,\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "description_zh": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002", "description_zh_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span class=\"productname\">PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em class=\"firstterm\">\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a class=\"link\" href=\"/zh/docs/17/catalog-pg-am.html\"><code class=\"structname\">pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code class=\"structname\">pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em class=\"firstterm\">\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a class=\"xref\" href=\"/zh/docs/17/sql-create-access-method.html\"><span class=\"refentrytitle\">CREATE ACCESS METHOD</span></a> \u548c <a class=\"xref\" href=\"/zh/docs/17/sql-drop-access-method.html\"><span class=\"refentrytitle\">DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code class=\"type\">internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code class=\"type\">table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 <code class=\"structname\">TableAmRoutine</code> \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 <code class=\"literal\">static const</code> \u53d8\u91cf\u6765\u5b9e\u73b0\u3002<code class=\"structname\">TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 <em class=\"firstterm\">API \u7ed3\u6784\u4f53</em>\uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 <code class=\"structname\">TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605\n  <a class=\"ulink\" href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/access/tableam.h;hb=HEAD\">\n<code class=\"filename\">src/include/access/tableam.h</code></a> \u6587\u4ef6\u3002\n </p><p>\n  \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd <acronym class=\"acronym\">AM</acronym> \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1\n  <a class=\"ulink\" href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/executor/tuptable.h;hb=HEAD\">\n<code class=\"filename\">src/include/executor/tuptable.h</code></a>\uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002\n </p><p><a href=\"/zh/docs/17/tableam.html\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>"}, "summary": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002", "version": "17", "link_map": {"/zh/docs/17/tableam.html": "/docs/17/tableam.html", "/zh/docs/17/catalog-pg-am.html": "/docs/17/catalog-pg-am.html", "/zh/docs/17/sql-drop-access-method.html": "/docs/17/sql-drop-access-method.html", "/zh/docs/17/sql-create-access-method.html": "/docs/17/sql-create-access-method.html"}, "body_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span>PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em>\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a href=\"/zh/docs/17/catalog-pg-am.html\" rel=\"nofollow\"><code>pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code>pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em>\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a href=\"/zh/docs/17/sql-create-access-method.html\" rel=\"nofollow\"><span>CREATE ACCESS METHOD</span></a> \u548c <a href=\"/zh/docs/17/sql-drop-access-method.html\" rel=\"nofollow\"><span>DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code>internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code>table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 <code>static const</code> \u53d8\u91cf\u6765\u5b9e\u73b0\u3002<code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 <em>API \u7ed3\u6784\u4f53</em>\uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/access/tableam.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/access/tableam.h</code></a> \u6587\u4ef6\u3002\n </p><p>\n  \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd <acronym>AM</acronym> \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/executor/tuptable.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/executor/tuptable.h</code></a>\uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002\n </p><p><a href=\"/zh/docs/17/tableam.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>", "body_sha256": "5f81aee3cd48a80398a601b5b114dd79422e1160c6d4c2026a15611eb2db6619", "content_hash": "57de0685f9d8a3fea89236c1fda8716cce54af6b06b2d840103053c421e9fd8f", "source_database": "center", "source_revision": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}, "tables_zh": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "description": ["\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002"], "manual_html": "", "manual_path": "/docs/17/tableam.html", "sections_zh": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filelocator = heapam_relation_set_new_filelocator,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_block = heapam_scan_bitmap_next_block,\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "localization": {"status": "complete", "sources": [{"url": "/docs/17/tableam.html", "method": "same-major semantic node", "sha256": "ca73f37930100ff33aba97daef737d45dbc72bfaa127f973a18dfd1608cd5c74", "language": "zh", "matched_nodes": ["#TABLEAM/p[10]", "#TABLEAM/p[3]", "#TABLEAM/p[4]", "#TABLEAM/p[5]", "#TABLEAM/p[7]", "#TABLEAM/p[9]"]}], "language": "zh", "original_text": {"/versions/17/description/0": "The built-in heap table access method integrates tuple storage, visibility, scans, index fetches and maintenance with PostgreSQL.", "/versions/17/facts/0/label": "Interface family", "/versions/17/facts/0/value": "Table access method", "/versions/17/facts/1/label": "Handler or routine", "/versions/17/facts/2/label": "Recorded callbacks", "/versions/17/tables/0/title": "Registered interface handlers", "/versions/17/related/0/label": "System catalog pg_am", "/versions/17/related/2/label": "Index AM", "/versions/17/sections/0/title": "Interface and capability boundaries", "/versions/17/sections/1/title": "Heap storage, visibility and WAL", "/versions/17/sections/2/title": "Registered implementation in core source", "/versions/17/tables/0/rows/0/state": "Handler registered; conditions apply", "/versions/17/tables/0/rows/1/state": "Handler registered; conditions apply", "/versions/17/tables/0/rows/2/state": "Handler registered; conditions apply", "/versions/17/tables/0/rows/3/state": "Handler registered; conditions apply", "/versions/17/tables/0/rows/4/state": "Handler registered; conditions apply", "/versions/17/tables/0/rows/5/state": "Handler registered; conditions apply", "/versions/17/tables/0/rows/6/state": "Handler registered; conditions apply", "/versions/17/tables/0/rows/7/state": "Handler registered; conditions apply", "/versions/17/tables/0/rows/8/state": "Handler registered; conditions apply", "/versions/17/tables/0/rows/9/state": "Handler registered; conditions apply", "/versions/17/tables/0/rows/10/state": "Handler registered; conditions apply", "/versions/17/sections/0/paragraphs/0": "The matrix records callbacks actually registered in this source build. Registration identifies an implemented interface hook; options, query shape, privileges and provider rules determine whether an operation is allowed.", "/versions/17/sections/0/paragraphs/1": "The complete same-version manual below retains configuration, constraints and examples. No runtime capability test is claimed.", "/versions/17/sections/1/paragraphs/0": "This inventory starts with the Table AM interface in PostgreSQL 12. Earlier PostgreSQL heap storage is not relabeled as a Table AM implementation.", "/versions/17/sections/1/paragraphs/1": "Heap visibility follows PostgreSQL snapshots. WAL and crash-recovery behavior depend on relation persistence; temporary and unlogged tables differ from permanent tables. Index access methods remain separate from the table storage interface.", "/versions/17/tables/0/rows/0/feature": "Tuple slot", "/versions/17/tables/0/rows/1/feature": "Begin scan", "/versions/17/tables/0/rows/2/feature": "Parallel scan initialization", "/versions/17/tables/0/rows/3/feature": "Begin index lookup", "/versions/17/tables/0/rows/4/feature": "Fetch identified tuple", "/versions/17/tables/0/rows/5/feature": "Insert tuple", "/versions/17/tables/0/rows/6/feature": "Update tuple", "/versions/17/tables/0/rows/7/feature": "Delete tuple", "/versions/17/tables/0/rows/8/feature": "Vacuum relation", "/versions/17/tables/0/rows/9/feature": "Analyze block", "/versions/17/tables/0/columns/0/label": "Interface operation", "/versions/17/tables/0/columns/1/label": "Source observation", "/versions/17/tables/0/columns/2/label": "Callback", "/versions/17/tables/0/columns/3/label": "Implementation", "/versions/17/tables/0/rows/10/feature": "TOAST decision"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "c1d9721769c8557cb9594ecfcdddfbbc571fd11768bfd2848c6c4227502362d5", "canonical_center_text_hash": "57de0685f9d8a3fea89236c1fda8716cce54af6b06b2d840103053c421e9fd8f"}, "evidence_kind": "source and documentation", "description_zh": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 TableAmRoutine \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 static const \u53d8\u91cf\u6765\u5b9e\u73b0\u3002 TableAmRoutine \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 API \u7ed3\u6784\u4f53 \uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 TableAmRoutine \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605 src/include/access/tableam.h \u6587\u4ef6\u3002 \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd AM \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1 src/include/executor/tuptable.h \uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002", "comparison_data": {"options": [], "callbacks": {"scan_end": "heap_endscan", "scan_begin": "heap_beginscan", "tuple_lock": "heapam_tuple_lock", "scan_rescan": "heap_rescan", "multi_insert": "heap_multi_insert", "tuple_delete": "heapam_tuple_delete", "tuple_insert": "heapam_tuple_insert", "tuple_update": "heapam_tuple_update", "relation_size": "table_block_relation_size", "slot_callbacks": "heapam_slot_callbacks", "index_fetch_end": "heapam_index_fetch_end", "relation_vacuum": "heap_vacuum_rel", "tuple_tid_valid": "heapam_tuple_tid_valid", "scan_getnextslot": "heap_getnextslot", "index_fetch_begin": "heapam_index_fetch_begin", "index_fetch_reset": "heapam_index_fetch_reset", "index_fetch_tuple": "heapam_index_fetch_tuple", "relation_toast_am": "heapam_relation_toast_am", "scan_set_tidrange": "heap_set_tidrange", "relation_copy_data": "heapam_relation_copy_data", "index_delete_tuples": "heap_index_delete_tuples", "index_validate_scan": "heapam_index_validate_scan", "tuple_get_latest_tid": "heap_get_latest_tid", "parallelscan_estimate": "table_block_parallelscan_estimate", "index_build_range_scan": "heapam_index_build_range_scan", "relation_estimate_size": "heapam_estimate_rel_size", "scan_bitmap_next_block": "heapam_scan_bitmap_next_block", "scan_bitmap_next_tuple": "heapam_scan_bitmap_next_tuple", "scan_sample_next_block": "heapam_scan_sample_next_block", "scan_sample_next_tuple": "heapam_scan_sample_next_tuple", "parallelscan_initialize": "table_block_parallelscan_initialize", "scan_analyze_next_block": "heapam_scan_analyze_next_block", "scan_analyze_next_tuple": "heapam_scan_analyze_next_tuple", "tuple_fetch_row_version": "heapam_fetch_row_version", "tuple_insert_speculative": "heapam_tuple_insert_speculative", "tuple_satisfies_snapshot": "heapam_tuple_satisfies_snapshot", "parallelscan_reinitialize": "table_block_parallelscan_reinitialize", "relation_copy_for_cluster": "heapam_relation_copy_for_cluster", "scan_getnextslot_tidrange": "heap_getnextslot_tidrange", "relation_fetch_toast_slice": "heap_fetch_toast_slice", "relation_needs_toast_table": "heapam_relation_needs_toast_table", "tuple_complete_speculative": "heapam_tuple_complete_speculative", "relation_set_new_filelocator": "heapam_relation_set_new_filelocator", "relation_nontransactional_truncate": "heapam_relation_nontransactional_truncate"}, "source_options": [], "protocol_versions": {}}, "comparison_hash": "d129057b9afc0cb9f38d3137a9d84fd96a035ed851fab81db9903db8ab10aabd", "manual_language": "zh", "runtime_verified": false, "description_zh_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span>PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em>\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a href=\"/zh/docs/17/catalog-pg-am.html\" rel=\"nofollow\"><code>pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code>pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em>\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a href=\"/zh/docs/17/sql-create-access-method.html\" rel=\"nofollow\"><span>CREATE ACCESS METHOD</span></a> \u548c <a href=\"/zh/docs/17/sql-drop-access-method.html\" rel=\"nofollow\"><span>DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code>internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code>table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\u8be5\u51fd\u6570\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4e00\u4e2a\u6307\u5411 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c\u5176\u4e2d\u5305\u542b\u6838\u5fc3\u4ee3\u7801\u4f7f\u7528\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u8fd4\u56de\u503c\u9700\u8981\u5177\u6709\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\uff0c\u8fd9\u901a\u5e38\u901a\u8fc7\u5c06\u5176\u5b9a\u4e49\u4e3a\u5168\u5c40\u4f5c\u7528\u57df\u4e2d\u7684 <code>static const</code> \u53d8\u91cf\u6765\u5b9e\u73b0\u3002<code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e5f\u79f0\u4e3a\u8be5\u8bbf\u95ee\u65b9\u6cd5\u7684 <em>API \u7ed3\u6784\u4f53</em>\uff0c\u5b83\u901a\u8fc7\u56de\u8c03\u6765\u5b9a\u4e49\u8bbf\u95ee\u65b9\u6cd5\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u56de\u8c03\u662f\u666e\u901a C \u51fd\u6570\u7684\u6307\u9488\uff0c\u5728 SQL \u5c42\u65e2\u4e0d\u53ef\u89c1\u4e5f\u4e0d\u53ef\u8c03\u7528\u3002\u6240\u6709\u56de\u8c03\u53ca\u5176\u884c\u4e3a\u90fd\u5b9a\u4e49\u5728 <code>TableAmRoutine</code> \u7ed3\u6784\u4f53\u4e2d\uff08\u7ed3\u6784\u4f53\u5185\u7684\u6ce8\u91ca\u8bf4\u660e\u4e86\u5bf9\u56de\u8c03\u7684\u8981\u6c42\uff09\u3002\u5927\u591a\u6570\u56de\u8c03\u90fd\u6709\u5305\u88c5\u51fd\u6570\uff0c\u5176\u6587\u6863\u662f\u4ece\u8868\u8bbf\u95ee\u65b9\u6cd5\u4f7f\u7528\u8005\u800c\u975e\u5b9e\u73b0\u8005\u7684\u89d2\u5ea6\u7f16\u5199\u7684\u3002\u8be6\u60c5\u8bf7\u53c2\u9605\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/access/tableam.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/access/tableam.h</code></a> \u6587\u4ef6\u3002\n </p><p>\n  \u8981\u5b9e\u73b0\u4e00\u79cd\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5b9e\u73b0\u8005\u901a\u5e38\u9700\u8981\u5b9e\u73b0\u4e00\u79cd <acronym>AM</acronym> \u4e13\u7528\u7684\u5143\u7ec4\u8868\u69fd\u7c7b\u578b\uff08\u89c1\n  <a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/executor/tuptable.h;hb=HEAD\" rel=\"nofollow\">\n<code>src/include/executor/tuptable.h</code></a>\uff09\uff0c\u8fd9\u6837\u8bbf\u95ee\u65b9\u6cd5\u4e4b\u5916\u7684\u4ee3\u7801\u5c31\u80fd\u6301\u6709\u5bf9\u8be5 AM \u5143\u7ec4\u7684\u5f15\u7528\uff0c\u5e76\u8bbf\u95ee\u5143\u7ec4\u7684\u5404\u5217\u3002\n </p><p><a href=\"/zh/docs/17/tableam.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>"}, "18": {"facts": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "43"}], "tables": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "related": [{"url": "/wiki/catalog/pg_am/?v=18", "label": "\u7cfb\u7edf\u76ee\u5f55 pg_am"}, {"url": "/wiki/guc/default_table_access_method/?v=18", "label": "default_table_access_method"}, {"url": "/wiki/indexam/?v=18", "label": "\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5"}], "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": "/docs/18/tableam.html", "path": "tableam.html", "label": "PostgreSQL 18 English manual", "sha256": "e659dece936c960dfea9e801720deb3d76abf2c3696abb3f58d32ac17d0f22aa"}, {"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "line": 2616, "path": "src/backend/access/heap/heapam_handler.c", "label": "src/backend/access/heap/heapam_handler.c:2616", "sha256": "fd60a1f8d5530ce5c33fda6b74123c3c22e8c3b9ca6455a0e5d47aa392797a1e", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, {"url": "/docs/18/mvcc-intro.html", "path": "mvcc-intro.html", "label": "PostgreSQL 18 English manual", "sha256": "456469051ccd15ec2cfa1f2e656901a3bb63414db367003215ff810d638593e1"}, {"url": "/docs/18/sql-createtable.html", "path": "sql-createtable.html", "label": "PostgreSQL 18 English manual", "sha256": "b4d703391fe1102d0e02bd6769bef928513eb7a5542f38f7448fc77fe69e0d5b"}, {"url": "/docs/18/routine-vacuuming.html", "path": "routine-vacuuming.html", "label": "PostgreSQL 18 English manual", "sha256": "ede8964df385f5bc69ae991369e6eaf99ae58aa2d6210e8bf868f090bb95b002"}, {"url": "/docs/18/catalog-pg-am.html", "path": "catalog-pg-am.html", "label": "PostgreSQL 18 English manual", "sha256": "579364179365a51945e2edb6481df5d198916c2c725e506f166824dedf08994c"}], "zh_from": {"kind": "same-version-chinese-manual-with-source-derived-identity", "manual": {"url": "/zh/docs/18/tableam.html", "anchor": "", "locale": "zh-Hans", "version": "18", "build_id": 107, "page_key": "tableam.html", "extraction": "concept-introduction", "source_hash": "5513798c8f4d2e9c76bf0d8caf92f332339bdbeb19e1bb906d44cc1e087d5e02", "fragment_sha256": "96873a2e8ad1f66e093c9294861e7feb00600a79f0d545d60715e7ad0b856019", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:08e987a66af27b98444a8057c256314eafa13611a3fb9e888214fc436824244b", "translated_from_revision": null}, "body_sha256": "85bdb6a1963e89d1415d778bb87d4525566b555ea0b69c0788315776ab9c102b", "runtime_rerun": false, "authored_translation": "source-derived-identity", "source_facts_revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, "facts_zh": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "43"}], "sections": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filelocator = heapam_relation_set_new_filelocator,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "callbacks": {"scan_end": "heap_endscan", "scan_begin": "heap_beginscan", "tuple_lock": "heapam_tuple_lock", "scan_rescan": "heap_rescan", "multi_insert": "heap_multi_insert", "tuple_delete": "heapam_tuple_delete", "tuple_insert": "heapam_tuple_insert", "tuple_update": "heapam_tuple_update", "relation_size": "table_block_relation_size", "slot_callbacks": "heapam_slot_callbacks", "index_fetch_end": "heapam_index_fetch_end", "relation_vacuum": "heap_vacuum_rel", "tuple_tid_valid": "heapam_tuple_tid_valid", "scan_getnextslot": "heap_getnextslot", "index_fetch_begin": "heapam_index_fetch_begin", "index_fetch_reset": "heapam_index_fetch_reset", "index_fetch_tuple": "heapam_index_fetch_tuple", "relation_toast_am": "heapam_relation_toast_am", "scan_set_tidrange": "heap_set_tidrange", "relation_copy_data": "heapam_relation_copy_data", "index_delete_tuples": "heap_index_delete_tuples", "index_validate_scan": "heapam_index_validate_scan", "tuple_get_latest_tid": "heap_get_latest_tid", "parallelscan_estimate": "table_block_parallelscan_estimate", "index_build_range_scan": "heapam_index_build_range_scan", "relation_estimate_size": "heapam_estimate_rel_size", "scan_bitmap_next_tuple": "heapam_scan_bitmap_next_tuple", "scan_sample_next_block": "heapam_scan_sample_next_block", "scan_sample_next_tuple": "heapam_scan_sample_next_tuple", "parallelscan_initialize": "table_block_parallelscan_initialize", "scan_analyze_next_block": "heapam_scan_analyze_next_block", "scan_analyze_next_tuple": "heapam_scan_analyze_next_tuple", "tuple_fetch_row_version": "heapam_fetch_row_version", "tuple_insert_speculative": "heapam_tuple_insert_speculative", "tuple_satisfies_snapshot": "heapam_tuple_satisfies_snapshot", "parallelscan_reinitialize": "table_block_parallelscan_reinitialize", "relation_copy_for_cluster": "heapam_relation_copy_for_cluster", "scan_getnextslot_tidrange": "heap_getnextslot_tidrange", "relation_fetch_toast_slice": "heap_fetch_toast_slice", "relation_needs_toast_table": "heapam_relation_needs_toast_table", "tuple_complete_speculative": "heapam_tuple_complete_speculative", "relation_set_new_filelocator": "heapam_relation_set_new_filelocator", "relation_nontransactional_truncate": "heapam_relation_nontransactional_truncate"}, "center_zh": {"title": "Core table AM", "locale": "zh-Hans", "source": {"key": "heap", "locale": "zh-Hans", "version": "18", "text_hash": "4c199aa6b38c042658e4f31e3a506a7ee77113bae37c87aa35d1a18adb9fb6d6", "collection": "tableam", "dataset_hash": "7c31b524dfe136022d39a6ae8dcfac6b3bbd5f8fdaf422536599981252aff0c9", "source_database": "center", "source_revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, "payload": {"facts": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "43"}], "tables": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "zh_from": {"kind": "same-version-chinese-manual-with-source-derived-identity", "manual": {"url": "/zh/docs/18/tableam.html", "anchor": "", "locale": "zh-Hans", "version": "18", "build_id": 107, "page_key": "tableam.html", "extraction": "concept-introduction", "source_hash": "5513798c8f4d2e9c76bf0d8caf92f332339bdbeb19e1bb906d44cc1e087d5e02", "fragment_sha256": "96873a2e8ad1f66e093c9294861e7feb00600a79f0d545d60715e7ad0b856019", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:08e987a66af27b98444a8057c256314eafa13611a3fb9e888214fc436824244b", "translated_from_revision": null}, "body_sha256": "85bdb6a1963e89d1415d778bb87d4525566b555ea0b69c0788315776ab9c102b", "runtime_rerun": false, "authored_translation": "source-derived-identity", "source_facts_revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, "sections": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filelocator = heapam_relation_set_new_filelocator,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "description_zh": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002 \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a", "description_zh_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span class=\"productname\">PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em class=\"firstterm\">\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a class=\"link\" href=\"/zh/docs/18/catalog-pg-am.html\"><code class=\"structname\">pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code class=\"structname\">pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em class=\"firstterm\">\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a class=\"xref\" href=\"/zh/docs/18/sql-create-access-method.html\"><span class=\"refentrytitle\">CREATE ACCESS METHOD</span></a> \u548c <a class=\"xref\" href=\"/zh/docs/18/sql-drop-access-method.html\"><span class=\"refentrytitle\">DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code class=\"type\">internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code class=\"type\">table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\n </p><p>\n  \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a\n </p><p><a href=\"/zh/docs/18/tableam.html\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>"}, "summary": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002 \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a", "version": "18", "link_map": {"/zh/docs/18/tableam.html": "/docs/18/tableam.html", "/zh/docs/18/catalog-pg-am.html": "/docs/18/catalog-pg-am.html", "/zh/docs/18/sql-drop-access-method.html": "/docs/18/sql-drop-access-method.html", "/zh/docs/18/sql-create-access-method.html": "/docs/18/sql-create-access-method.html"}, "body_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span>PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em>\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a href=\"/zh/docs/18/catalog-pg-am.html\" rel=\"nofollow\"><code>pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code>pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em>\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a href=\"/zh/docs/18/sql-create-access-method.html\" rel=\"nofollow\"><span>CREATE ACCESS METHOD</span></a> \u548c <a href=\"/zh/docs/18/sql-drop-access-method.html\" rel=\"nofollow\"><span>DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code>internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code>table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\n </p><p>\n  \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a\n </p><p><a href=\"/zh/docs/18/tableam.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>", "body_sha256": "75af8a8bb00234c2ec3ed73a5f13cf0cf2a6581dd8ce22b15a93f6feeab276fd", "content_hash": "4c199aa6b38c042658e4f31e3a506a7ee77113bae37c87aa35d1a18adb9fb6d6", "source_database": "center", "source_revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, "tables_zh": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "description": ["\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002 \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a"], "manual_html": "", "manual_path": "/docs/18/tableam.html", "sections_zh": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filelocator = heapam_relation_set_new_filelocator,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "localization": {"status": "complete", "sources": [{"url": "/docs/18/tableam.html", "method": "same-major semantic node", "sha256": "29a69a32b5b468f79af513ef4e398bccc182443109d9f3da23f374e018b981e6", "language": "zh", "matched_nodes": ["#TABLEAM/p[11]", "#TABLEAM/p[13]", "#TABLEAM/p[15]", "#TABLEAM/p[16]", "#TABLEAM/p[3]", "#TABLEAM/p[4]", "#TABLEAM/p[5]", "#TABLEAM/p[6]", "#TABLEAM/p[8]", "#TABLEAM/p[9]"]}], "language": "zh", "original_text": {"/versions/18/description/0": "The built-in heap table access method integrates tuple storage, visibility, scans, index fetches and maintenance with PostgreSQL.", "/versions/18/facts/0/label": "Interface family", "/versions/18/facts/0/value": "Table access method", "/versions/18/facts/1/label": "Handler or routine", "/versions/18/facts/2/label": "Recorded callbacks", "/versions/18/tables/0/title": "Registered interface handlers", "/versions/18/related/0/label": "System catalog pg_am", "/versions/18/related/2/label": "Index AM", "/versions/18/sections/0/title": "Interface and capability boundaries", "/versions/18/sections/1/title": "Heap storage, visibility and WAL", "/versions/18/sections/2/title": "Registered implementation in core source", "/versions/18/tables/0/rows/0/state": "Handler registered; conditions apply", "/versions/18/tables/0/rows/1/state": "Handler registered; conditions apply", "/versions/18/tables/0/rows/2/state": "Handler registered; conditions apply", "/versions/18/tables/0/rows/3/state": "Handler registered; conditions apply", "/versions/18/tables/0/rows/4/state": "Handler registered; conditions apply", "/versions/18/tables/0/rows/5/state": "Handler registered; conditions apply", "/versions/18/tables/0/rows/6/state": "Handler registered; conditions apply", "/versions/18/tables/0/rows/7/state": "Handler registered; conditions apply", "/versions/18/tables/0/rows/8/state": "Handler registered; conditions apply", "/versions/18/tables/0/rows/9/state": "Handler registered; conditions apply", "/versions/18/tables/0/rows/10/state": "Handler registered; conditions apply", "/versions/18/sections/0/paragraphs/0": "The matrix records callbacks actually registered in this source build. Registration identifies an implemented interface hook; options, query shape, privileges and provider rules determine whether an operation is allowed.", "/versions/18/sections/0/paragraphs/1": "The complete same-version manual below retains configuration, constraints and examples. No runtime capability test is claimed.", "/versions/18/sections/1/paragraphs/0": "This inventory starts with the Table AM interface in PostgreSQL 12. Earlier PostgreSQL heap storage is not relabeled as a Table AM implementation.", "/versions/18/sections/1/paragraphs/1": "Heap visibility follows PostgreSQL snapshots. WAL and crash-recovery behavior depend on relation persistence; temporary and unlogged tables differ from permanent tables. Index access methods remain separate from the table storage interface.", "/versions/18/tables/0/rows/0/feature": "Tuple slot", "/versions/18/tables/0/rows/1/feature": "Begin scan", "/versions/18/tables/0/rows/2/feature": "Parallel scan initialization", "/versions/18/tables/0/rows/3/feature": "Begin index lookup", "/versions/18/tables/0/rows/4/feature": "Fetch identified tuple", "/versions/18/tables/0/rows/5/feature": "Insert tuple", "/versions/18/tables/0/rows/6/feature": "Update tuple", "/versions/18/tables/0/rows/7/feature": "Delete tuple", "/versions/18/tables/0/rows/8/feature": "Vacuum relation", "/versions/18/tables/0/rows/9/feature": "Analyze block", "/versions/18/tables/0/columns/0/label": "Interface operation", "/versions/18/tables/0/columns/1/label": "Source observation", "/versions/18/tables/0/columns/2/label": "Callback", "/versions/18/tables/0/columns/3/label": "Implementation", "/versions/18/tables/0/rows/10/feature": "TOAST decision"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "6c7bd2e2f6691cce57c835d991feefc5864df47eda2ec7884768f0c2efa48406", "canonical_center_text_hash": "4c199aa6b38c042658e4f31e3a506a7ee77113bae37c87aa35d1a18adb9fb6d6"}, "evidence_kind": "source and documentation", "description_zh": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002 \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a", "comparison_data": {"options": [], "callbacks": {"scan_end": "heap_endscan", "scan_begin": "heap_beginscan", "tuple_lock": "heapam_tuple_lock", "scan_rescan": "heap_rescan", "multi_insert": "heap_multi_insert", "tuple_delete": "heapam_tuple_delete", "tuple_insert": "heapam_tuple_insert", "tuple_update": "heapam_tuple_update", "relation_size": "table_block_relation_size", "slot_callbacks": "heapam_slot_callbacks", "index_fetch_end": "heapam_index_fetch_end", "relation_vacuum": "heap_vacuum_rel", "tuple_tid_valid": "heapam_tuple_tid_valid", "scan_getnextslot": "heap_getnextslot", "index_fetch_begin": "heapam_index_fetch_begin", "index_fetch_reset": "heapam_index_fetch_reset", "index_fetch_tuple": "heapam_index_fetch_tuple", "relation_toast_am": "heapam_relation_toast_am", "scan_set_tidrange": "heap_set_tidrange", "relation_copy_data": "heapam_relation_copy_data", "index_delete_tuples": "heap_index_delete_tuples", "index_validate_scan": "heapam_index_validate_scan", "tuple_get_latest_tid": "heap_get_latest_tid", "parallelscan_estimate": "table_block_parallelscan_estimate", "index_build_range_scan": "heapam_index_build_range_scan", "relation_estimate_size": "heapam_estimate_rel_size", "scan_bitmap_next_tuple": "heapam_scan_bitmap_next_tuple", "scan_sample_next_block": "heapam_scan_sample_next_block", "scan_sample_next_tuple": "heapam_scan_sample_next_tuple", "parallelscan_initialize": "table_block_parallelscan_initialize", "scan_analyze_next_block": "heapam_scan_analyze_next_block", "scan_analyze_next_tuple": "heapam_scan_analyze_next_tuple", "tuple_fetch_row_version": "heapam_fetch_row_version", "tuple_insert_speculative": "heapam_tuple_insert_speculative", "tuple_satisfies_snapshot": "heapam_tuple_satisfies_snapshot", "parallelscan_reinitialize": "table_block_parallelscan_reinitialize", "relation_copy_for_cluster": "heapam_relation_copy_for_cluster", "scan_getnextslot_tidrange": "heap_getnextslot_tidrange", "relation_fetch_toast_slice": "heap_fetch_toast_slice", "relation_needs_toast_table": "heapam_relation_needs_toast_table", "tuple_complete_speculative": "heapam_tuple_complete_speculative", "relation_set_new_filelocator": "heapam_relation_set_new_filelocator", "relation_nontransactional_truncate": "heapam_relation_nontransactional_truncate"}, "source_options": [], "protocol_versions": {}}, "comparison_hash": "1238506f6e6c6648382f3362465d376e28e55ca6108f975b44f413d320769112", "manual_language": "zh", "runtime_verified": false, "description_zh_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span>PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em>\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a href=\"/zh/docs/18/catalog-pg-am.html\" rel=\"nofollow\"><code>pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code>pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em>\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a href=\"/zh/docs/18/sql-create-access-method.html\" rel=\"nofollow\"><span>CREATE ACCESS METHOD</span></a> \u548c <a href=\"/zh/docs/18/sql-drop-access-method.html\" rel=\"nofollow\"><span>DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code>internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code>table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\n </p><p>\n  \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a\n </p><p><a href=\"/zh/docs/18/tableam.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>", "center_zh_rendered": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span>PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em>\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a href=\"/docs/18/catalog-pg-am.html\"><code>pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code>pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em>\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a href=\"/docs/18/sql-create-access-method.html\"><span>CREATE ACCESS METHOD</span></a> \u548c <a href=\"/docs/18/sql-drop-access-method.html\"><span>DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code>internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code>table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\n </p><p>\n  \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a\n </p><p><a href=\"/docs/18/tableam.html\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>"}, "19": {"facts": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "43"}], "tables": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "related": [{"url": "/wiki/catalog/pg_am/?v=19", "label": "\u7cfb\u7edf\u76ee\u5f55 pg_am"}, {"url": "/wiki/guc/default_table_access_method/?v=19", "label": "default_table_access_method"}, {"url": "/wiki/indexam/?v=19", "label": "\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5"}], "release": {"ref": "https://ftp.postgresql.org/pub/source/v19rc1/postgresql-19rc1.tar.bz2", "label": "19rc1", "major": "19", "channel": "preview", "revision": "af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701"}, "sources": [{"url": "/docs/19/tableam.html", "path": "tableam.html", "label": "PostgreSQL 19 English manual", "sha256": "7b129f86aa7f3eee0d0acc58e9d11ae946580083bc61a04a66f166852ff9ce1b"}, {"url": "https://ftp.postgresql.org/pub/source/v19rc1/postgresql-19rc1.tar.bz2", "line": 2657, "path": "src/backend/access/heap/heapam_handler.c", "label": "src/backend/access/heap/heapam_handler.c:2657", "sha256": "a4090217097bf16b0eedc5b0448092d640aa259a9ea9ab69caf582f910f9e911", "archive_sha256": "af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701"}, {"url": "/docs/19/mvcc-intro.html", "path": "mvcc-intro.html", "label": "PostgreSQL 19 English manual", "sha256": "c1e16f152a4f1cf4f0654c15e50a50e0bf2017a8d74030e14524edf13baf062d"}, {"url": "/docs/19/sql-createtable.html", "path": "sql-createtable.html", "label": "PostgreSQL 19 English manual", "sha256": "f3aef4e5d3a127a68b13e8b7eced81f8406d39971e8bb866df5f7dd356007dfc"}, {"url": "/docs/19/routine-vacuuming.html", "path": "routine-vacuuming.html", "label": "PostgreSQL 19 English manual", "sha256": "80a2ca2d766df967de58344697c81d1fd4bffa958201916c6d8596a43510d8c0"}, {"url": "/docs/19/catalog-pg-am.html", "path": "catalog-pg-am.html", "label": "PostgreSQL 19 English manual", "sha256": "c5deb5e4df0f2d0b9ccd3f0798243f60efb00831545348fbeef74bbe7eb00ff4"}], "zh_from": {"kind": "same-version-chinese-manual-with-source-derived-identity", "manual": {"url": "/zh/docs/19/tableam.html", "anchor": "", "locale": "zh-Hans", "version": "19", "build_id": 109, "page_key": "tableam.html", "extraction": "concept-introduction", "source_hash": "ac88b6cb3dc0abdf707b3a0fb1f5fe882e51299a24e8d4ad708fb3f54ffdfdf8", "fragment_sha256": "b2f91e96cdc7741d849be91223f2de772d56b19fc61093586e3a93736e46ed08", "source_revision": "sha256:af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:65fda1f1b62a89992b84014c9157e61b67dbe8190e93945826efec668fad038c", "translated_from_revision": "sha256:af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701"}, "body_sha256": "8818454cb1e87aa6c272ad2ff7e9d85ec8ace5b6107eb25edd79b279db5f14cf", "runtime_rerun": false, "authored_translation": "source-derived-identity", "source_facts_revision": "af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701"}, "facts_zh": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "43"}], "sections": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filelocator = heapam_relation_set_new_filelocator,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "callbacks": {"scan_end": "heap_endscan", "scan_begin": "heap_beginscan", "tuple_lock": "heapam_tuple_lock", "scan_rescan": "heap_rescan", "multi_insert": "heap_multi_insert", "tuple_delete": "heapam_tuple_delete", "tuple_insert": "heapam_tuple_insert", "tuple_update": "heapam_tuple_update", "relation_size": "table_block_relation_size", "slot_callbacks": "heapam_slot_callbacks", "index_fetch_end": "heapam_index_fetch_end", "relation_vacuum": "heap_vacuum_rel", "tuple_tid_valid": "heapam_tuple_tid_valid", "scan_getnextslot": "heap_getnextslot", "index_fetch_begin": "heapam_index_fetch_begin", "index_fetch_reset": "heapam_index_fetch_reset", "index_fetch_tuple": "heapam_index_fetch_tuple", "relation_toast_am": "heapam_relation_toast_am", "scan_set_tidrange": "heap_set_tidrange", "relation_copy_data": "heapam_relation_copy_data", "index_delete_tuples": "heap_index_delete_tuples", "index_validate_scan": "heapam_index_validate_scan", "tuple_get_latest_tid": "heap_get_latest_tid", "parallelscan_estimate": "table_block_parallelscan_estimate", "index_build_range_scan": "heapam_index_build_range_scan", "relation_estimate_size": "heapam_estimate_rel_size", "scan_bitmap_next_tuple": "heapam_scan_bitmap_next_tuple", "scan_sample_next_block": "heapam_scan_sample_next_block", "scan_sample_next_tuple": "heapam_scan_sample_next_tuple", "parallelscan_initialize": "table_block_parallelscan_initialize", "scan_analyze_next_block": "heapam_scan_analyze_next_block", "scan_analyze_next_tuple": "heapam_scan_analyze_next_tuple", "tuple_fetch_row_version": "heapam_fetch_row_version", "tuple_insert_speculative": "heapam_tuple_insert_speculative", "tuple_satisfies_snapshot": "heapam_tuple_satisfies_snapshot", "parallelscan_reinitialize": "table_block_parallelscan_reinitialize", "relation_copy_for_cluster": "heapam_relation_copy_for_cluster", "scan_getnextslot_tidrange": "heap_getnextslot_tidrange", "relation_fetch_toast_slice": "heap_fetch_toast_slice", "relation_needs_toast_table": "heapam_relation_needs_toast_table", "tuple_complete_speculative": "heapam_tuple_complete_speculative", "relation_set_new_filelocator": "heapam_relation_set_new_filelocator", "relation_nontransactional_truncate": "heapam_relation_nontransactional_truncate"}, "center_zh": {"title": "Core table AM", "locale": "zh-Hans", "source": {"key": "heap", "locale": "zh-Hans", "version": "19", "text_hash": "1f20bd74cef119bda0f0b2c3139fdde0a7a84261910da12f9ef35865a2b95711", "collection": "tableam", "dataset_hash": "7c31b524dfe136022d39a6ae8dcfac6b3bbd5f8fdaf422536599981252aff0c9", "source_database": "center", "source_revision": "af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701"}, "payload": {"facts": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "43"}], "tables": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "zh_from": {"kind": "same-version-chinese-manual-with-source-derived-identity", "manual": {"url": "/zh/docs/19/tableam.html", "anchor": "", "locale": "zh-Hans", "version": "19", "build_id": 109, "page_key": "tableam.html", "extraction": "concept-introduction", "source_hash": "ac88b6cb3dc0abdf707b3a0fb1f5fe882e51299a24e8d4ad708fb3f54ffdfdf8", "fragment_sha256": "b2f91e96cdc7741d849be91223f2de772d56b19fc61093586e3a93736e46ed08", "source_revision": "sha256:af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:65fda1f1b62a89992b84014c9157e61b67dbe8190e93945826efec668fad038c", "translated_from_revision": "sha256:af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701"}, "body_sha256": "8818454cb1e87aa6c272ad2ff7e9d85ec8ace5b6107eb25edd79b279db5f14cf", "runtime_rerun": false, "authored_translation": "source-derived-identity", "source_facts_revision": "af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701"}, "sections": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filelocator = heapam_relation_set_new_filelocator,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "description_zh": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002 \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a", "description_zh_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span class=\"productname\">PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em class=\"firstterm\">\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a class=\"link\" href=\"/zh/docs/19/catalog-pg-am.html\"><code class=\"structname\">pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code class=\"structname\">pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em class=\"firstterm\">\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a class=\"xref\" href=\"/zh/docs/19/sql-create-access-method.html\"><span class=\"refentrytitle\">CREATE ACCESS METHOD</span></a> \u548c <a class=\"xref\" href=\"/zh/docs/19/sql-drop-access-method.html\"><span class=\"refentrytitle\">DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code class=\"type\">internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code class=\"type\">table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\n </p><p>\n  \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a\n </p><p><a href=\"/zh/docs/19/tableam.html\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>"}, "summary": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002 \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a", "version": "19", "link_map": {"/zh/docs/19/tableam.html": "/docs/19/tableam.html", "/zh/docs/19/catalog-pg-am.html": "/docs/19/catalog-pg-am.html", "/zh/docs/19/sql-drop-access-method.html": "/docs/19/sql-drop-access-method.html", "/zh/docs/19/sql-create-access-method.html": "/docs/19/sql-create-access-method.html"}, "body_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span>PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em>\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a href=\"/zh/docs/19/catalog-pg-am.html\" rel=\"nofollow\"><code>pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code>pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em>\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a href=\"/zh/docs/19/sql-create-access-method.html\" rel=\"nofollow\"><span>CREATE ACCESS METHOD</span></a> \u548c <a href=\"/zh/docs/19/sql-drop-access-method.html\" rel=\"nofollow\"><span>DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code>internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code>table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\n </p><p>\n  \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a\n </p><p><a href=\"/zh/docs/19/tableam.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>", "body_sha256": "844adc0bbefca8c0a8959794b2f7ac1a1e04b978b1eddfe64acee0858da1a2cf", "content_hash": "1f20bd74cef119bda0f0b2c3139fdde0a7a84261910da12f9ef35865a2b95711", "source_database": "center", "source_revision": "af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701"}, "tables_zh": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "description": ["\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002 \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a"], "manual_html": "", "manual_path": "/docs/19/tableam.html", "sections_zh": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filelocator = heapam_relation_set_new_filelocator,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "localization": {"status": "complete", "sources": [{"url": "/docs/19/tableam.html", "method": "same-major semantic node", "sha256": "5735ad6434b05781c1697d3ef0c80da17d5082529c1db630537f5648188d9db6", "language": "zh", "matched_nodes": ["#TABLEAM/p[11]", "#TABLEAM/p[13]", "#TABLEAM/p[15]", "#TABLEAM/p[16]", "#TABLEAM/p[3]", "#TABLEAM/p[4]", "#TABLEAM/p[5]", "#TABLEAM/p[6]", "#TABLEAM/p[8]", "#TABLEAM/p[9]"]}], "language": "zh", "original_text": {"/versions/19/description/0": "The built-in heap table access method integrates tuple storage, visibility, scans, index fetches and maintenance with PostgreSQL.", "/versions/19/facts/0/label": "Interface family", "/versions/19/facts/0/value": "Table access method", "/versions/19/facts/1/label": "Handler or routine", "/versions/19/facts/2/label": "Recorded callbacks", "/versions/19/tables/0/title": "Registered interface handlers", "/versions/19/related/0/label": "System catalog pg_am", "/versions/19/related/2/label": "Index AM", "/versions/19/sections/0/title": "Interface and capability boundaries", "/versions/19/sections/1/title": "Heap storage, visibility and WAL", "/versions/19/sections/2/title": "Registered implementation in core source", "/versions/19/tables/0/rows/0/state": "Handler registered; conditions apply", "/versions/19/tables/0/rows/1/state": "Handler registered; conditions apply", "/versions/19/tables/0/rows/2/state": "Handler registered; conditions apply", "/versions/19/tables/0/rows/3/state": "Handler registered; conditions apply", "/versions/19/tables/0/rows/4/state": "Handler registered; conditions apply", "/versions/19/tables/0/rows/5/state": "Handler registered; conditions apply", "/versions/19/tables/0/rows/6/state": "Handler registered; conditions apply", "/versions/19/tables/0/rows/7/state": "Handler registered; conditions apply", "/versions/19/tables/0/rows/8/state": "Handler registered; conditions apply", "/versions/19/tables/0/rows/9/state": "Handler registered; conditions apply", "/versions/19/tables/0/rows/10/state": "Handler registered; conditions apply", "/versions/19/sections/0/paragraphs/0": "The matrix records callbacks actually registered in this source build. Registration identifies an implemented interface hook; options, query shape, privileges and provider rules determine whether an operation is allowed.", "/versions/19/sections/0/paragraphs/1": "The complete same-version manual below retains configuration, constraints and examples. No runtime capability test is claimed.", "/versions/19/sections/1/paragraphs/0": "This inventory starts with the Table AM interface in PostgreSQL 12. Earlier PostgreSQL heap storage is not relabeled as a Table AM implementation.", "/versions/19/sections/1/paragraphs/1": "Heap visibility follows PostgreSQL snapshots. WAL and crash-recovery behavior depend on relation persistence; temporary and unlogged tables differ from permanent tables. Index access methods remain separate from the table storage interface.", "/versions/19/tables/0/rows/0/feature": "Tuple slot", "/versions/19/tables/0/rows/1/feature": "Begin scan", "/versions/19/tables/0/rows/2/feature": "Parallel scan initialization", "/versions/19/tables/0/rows/3/feature": "Begin index lookup", "/versions/19/tables/0/rows/4/feature": "Fetch identified tuple", "/versions/19/tables/0/rows/5/feature": "Insert tuple", "/versions/19/tables/0/rows/6/feature": "Update tuple", "/versions/19/tables/0/rows/7/feature": "Delete tuple", "/versions/19/tables/0/rows/8/feature": "Vacuum relation", "/versions/19/tables/0/rows/9/feature": "Analyze block", "/versions/19/tables/0/columns/0/label": "Interface operation", "/versions/19/tables/0/columns/1/label": "Source observation", "/versions/19/tables/0/columns/2/label": "Callback", "/versions/19/tables/0/columns/3/label": "Implementation", "/versions/19/tables/0/rows/10/feature": "TOAST decision"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "ccf234c79dca290e6688b616b78939fee4c12c6b6636d0c702b0ca71c375172d", "canonical_center_text_hash": "1f20bd74cef119bda0f0b2c3139fdde0a7a84261910da12f9ef35865a2b95711"}, "evidence_kind": "source and documentation", "description_zh": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002 \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a", "comparison_data": {"options": [], "callbacks": {"scan_end": "heap_endscan", "scan_begin": "heap_beginscan", "tuple_lock": "heapam_tuple_lock", "scan_rescan": "heap_rescan", "multi_insert": "heap_multi_insert", "tuple_delete": "heapam_tuple_delete", "tuple_insert": "heapam_tuple_insert", "tuple_update": "heapam_tuple_update", "relation_size": "table_block_relation_size", "slot_callbacks": "heapam_slot_callbacks", "index_fetch_end": "heapam_index_fetch_end", "relation_vacuum": "heap_vacuum_rel", "tuple_tid_valid": "heapam_tuple_tid_valid", "scan_getnextslot": "heap_getnextslot", "index_fetch_begin": "heapam_index_fetch_begin", "index_fetch_reset": "heapam_index_fetch_reset", "index_fetch_tuple": "heapam_index_fetch_tuple", "relation_toast_am": "heapam_relation_toast_am", "scan_set_tidrange": "heap_set_tidrange", "relation_copy_data": "heapam_relation_copy_data", "index_delete_tuples": "heap_index_delete_tuples", "index_validate_scan": "heapam_index_validate_scan", "tuple_get_latest_tid": "heap_get_latest_tid", "parallelscan_estimate": "table_block_parallelscan_estimate", "index_build_range_scan": "heapam_index_build_range_scan", "relation_estimate_size": "heapam_estimate_rel_size", "scan_bitmap_next_tuple": "heapam_scan_bitmap_next_tuple", "scan_sample_next_block": "heapam_scan_sample_next_block", "scan_sample_next_tuple": "heapam_scan_sample_next_tuple", "parallelscan_initialize": "table_block_parallelscan_initialize", "scan_analyze_next_block": "heapam_scan_analyze_next_block", "scan_analyze_next_tuple": "heapam_scan_analyze_next_tuple", "tuple_fetch_row_version": "heapam_fetch_row_version", "tuple_insert_speculative": "heapam_tuple_insert_speculative", "tuple_satisfies_snapshot": "heapam_tuple_satisfies_snapshot", "parallelscan_reinitialize": "table_block_parallelscan_reinitialize", "relation_copy_for_cluster": "heapam_relation_copy_for_cluster", "scan_getnextslot_tidrange": "heap_getnextslot_tidrange", "relation_fetch_toast_slice": "heap_fetch_toast_slice", "relation_needs_toast_table": "heapam_relation_needs_toast_table", "tuple_complete_speculative": "heapam_tuple_complete_speculative", "relation_set_new_filelocator": "heapam_relation_set_new_filelocator", "relation_nontransactional_truncate": "heapam_relation_nontransactional_truncate"}, "source_options": [], "protocol_versions": {}}, "comparison_hash": "1238506f6e6c6648382f3362465d376e28e55ca6108f975b44f413d320769112", "manual_language": "zh", "runtime_verified": false, "description_zh_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span>PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em>\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a href=\"/zh/docs/19/catalog-pg-am.html\" rel=\"nofollow\"><code>pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code>pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em>\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a href=\"/zh/docs/19/sql-create-access-method.html\" rel=\"nofollow\"><span>CREATE ACCESS METHOD</span></a> \u548c <a href=\"/zh/docs/19/sql-drop-access-method.html\" rel=\"nofollow\"><span>DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code>internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code>table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\n </p><p>\n  \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a\n </p><p><a href=\"/zh/docs/19/tableam.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>", "source_revalidation": {"kind": "static-same-version-source-and-manual-replay", "audit": "wiki-audit-20261023", "runtime_rerun": false, "compared_fields": "entity membership and source-derived facts; presentation markup normalized", "source_revision": "af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701", "previous_source_revision": "83157ee9c599d03b2f7a3d73ef3a56ec24e0e79cc2b3501a64d1364f56398c86"}}, "20": {"facts": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "43"}], "tables": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_scan_begin", "implementation": "heapam_index_scan_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "fetch_tid", "implementation": "heapam_fetch_tid"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "related": [{"url": "/wiki/catalog/pg_am/?v=20", "label": "\u7cfb\u7edf\u76ee\u5f55 pg_am"}, {"url": "/wiki/guc/default_table_access_method/?v=20", "label": "default_table_access_method"}, {"url": "/wiki/indexam/?v=20", "label": "\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5"}], "release": {"ref": "https://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.bz2", "label": "20devel", "major": "20", "channel": "devel", "revision": "49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac"}, "sources": [{"url": "/docs/devel/tableam.html", "path": "tableam.html", "label": "PostgreSQL 20 English manual", "sha256": "1060c63927045afd8e06d7eb9b34c72ae5669de2651b4db467e8e31ead0c5623"}, {"url": "https://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.bz2", "line": 2652, "path": "src/backend/access/heap/heapam_handler.c", "label": "src/backend/access/heap/heapam_handler.c:2652", "sha256": "eed36aede23e5167b07eb2a49b45225b69502ce53a535b65b4c62c8a89eb766c", "archive_sha256": "49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac"}, {"url": "/docs/devel/mvcc-intro.html", "path": "mvcc-intro.html", "label": "PostgreSQL 20 English manual", "sha256": "54394a30578de5e0551139091999d623d68e95f1e6973441226e20683144d420"}, {"url": "/docs/devel/sql-createtable.html", "path": "sql-createtable.html", "label": "PostgreSQL 20 English manual", "sha256": "8529635c740e0425008518536f03cb0f516f500d056553861940f4c860d0b8b8"}, {"url": "/docs/devel/routine-vacuuming.html", "path": "routine-vacuuming.html", "label": "PostgreSQL 20 English manual", "sha256": "ea02ca1735e697b7b55edbe35b3a66ff95bcd801e120cd79c1bf080d304a26f9"}, {"url": "/docs/devel/catalog-pg-am.html", "path": "catalog-pg-am.html", "label": "PostgreSQL 20 English manual", "sha256": "3bb98167b0849b6fe33d54522b48bab8406d5585d08a799933f2bf5b3bb1c20c"}], "zh_from": {"kind": "same-version-chinese-manual-with-source-derived-identity", "manual": {"url": "/zh/docs/devel/tableam.html", "anchor": "", "locale": "zh-Hans", "version": "20", "build_id": 111, "page_key": "tableam.html", "extraction": "concept-introduction", "source_hash": "a44524859faeb2a5ddc11957c3bb25b164622d34bac4df2677cebdcc252d1d1f", "fragment_sha256": "40adb9042904dad14f72334927f9b09a0ee20f8c2b8385ccdb037e3c76aaa4d4", "source_revision": "sha256:49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:98c980963b401d40bd50df72b909e7523e3148b8fdb48edd897de2efb67e5235", "translated_from_revision": "sha256:49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac"}, "body_sha256": "fc81a2f7ce0489ddabc6c60e392118d9b4c96341de2f501f5417eda7dd4bf5da", "runtime_rerun": false, "authored_translation": "source-derived-identity", "source_facts_revision": "49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac"}, "facts_zh": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "43"}], "sections": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_scan_begin = heapam_index_scan_begin,\n\t.index_scan_reset = heapam_index_scan_reset,\n\t.index_scan_end = heapam_index_scan_end,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.fetch_tid = heapam_fetch_tid,\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filelocator = heapam_relation_set_new_filelocator,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "callbacks": {"scan_end": "heap_endscan", "fetch_tid": "heapam_fetch_tid", "scan_begin": "heap_beginscan", "tuple_lock": "heapam_tuple_lock", "scan_rescan": "heap_rescan", "multi_insert": "heap_multi_insert", "tuple_delete": "heapam_tuple_delete", "tuple_insert": "heapam_tuple_insert", "tuple_update": "heapam_tuple_update", "relation_size": "table_block_relation_size", "index_scan_end": "heapam_index_scan_end", "slot_callbacks": "heapam_slot_callbacks", "relation_vacuum": "heap_vacuum_rel", "tuple_tid_valid": "heapam_tuple_tid_valid", "index_scan_begin": "heapam_index_scan_begin", "index_scan_reset": "heapam_index_scan_reset", "scan_getnextslot": "heap_getnextslot", "relation_toast_am": "heapam_relation_toast_am", "scan_set_tidrange": "heap_set_tidrange", "relation_copy_data": "heapam_relation_copy_data", "index_delete_tuples": "heap_index_delete_tuples", "index_validate_scan": "heapam_index_validate_scan", "tuple_get_latest_tid": "heap_get_latest_tid", "parallelscan_estimate": "table_block_parallelscan_estimate", "index_build_range_scan": "heapam_index_build_range_scan", "relation_estimate_size": "heapam_estimate_rel_size", "scan_bitmap_next_tuple": "heapam_scan_bitmap_next_tuple", "scan_sample_next_block": "heapam_scan_sample_next_block", "scan_sample_next_tuple": "heapam_scan_sample_next_tuple", "parallelscan_initialize": "table_block_parallelscan_initialize", "scan_analyze_next_block": "heapam_scan_analyze_next_block", "scan_analyze_next_tuple": "heapam_scan_analyze_next_tuple", "tuple_fetch_row_version": "heapam_fetch_row_version", "tuple_insert_speculative": "heapam_tuple_insert_speculative", "tuple_satisfies_snapshot": "heapam_tuple_satisfies_snapshot", "parallelscan_reinitialize": "table_block_parallelscan_reinitialize", "relation_copy_for_cluster": "heapam_relation_copy_for_cluster", "scan_getnextslot_tidrange": "heap_getnextslot_tidrange", "relation_fetch_toast_slice": "heap_fetch_toast_slice", "relation_needs_toast_table": "heapam_relation_needs_toast_table", "tuple_complete_speculative": "heapam_tuple_complete_speculative", "relation_set_new_filelocator": "heapam_relation_set_new_filelocator", "relation_nontransactional_truncate": "heapam_relation_nontransactional_truncate"}, "center_zh": {"title": "Core table AM", "locale": "zh-Hans", "source": {"key": "heap", "locale": "zh-Hans", "version": "20", "text_hash": "41a9e80c27808cbd9d56565502e0c52898970507cead2a1d0f7d44f7dfa7cab4", "collection": "tableam", "dataset_hash": "7c31b524dfe136022d39a6ae8dcfac6b3bbd5f8fdaf422536599981252aff0c9", "source_database": "center", "source_revision": "49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac"}, "payload": {"facts": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "43"}], "tables": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_scan_begin", "implementation": "heapam_index_scan_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "fetch_tid", "implementation": "heapam_fetch_tid"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "zh_from": {"kind": "same-version-chinese-manual-with-source-derived-identity", "manual": {"url": "/zh/docs/devel/tableam.html", "anchor": "", "locale": "zh-Hans", "version": "20", "build_id": 111, "page_key": "tableam.html", "extraction": "concept-introduction", "source_hash": "a44524859faeb2a5ddc11957c3bb25b164622d34bac4df2677cebdcc252d1d1f", "fragment_sha256": "40adb9042904dad14f72334927f9b09a0ee20f8c2b8385ccdb037e3c76aaa4d4", "source_revision": "sha256:49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:98c980963b401d40bd50df72b909e7523e3148b8fdb48edd897de2efb67e5235", "translated_from_revision": "sha256:49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac"}, "body_sha256": "fc81a2f7ce0489ddabc6c60e392118d9b4c96341de2f501f5417eda7dd4bf5da", "runtime_rerun": false, "authored_translation": "source-derived-identity", "source_facts_revision": "49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac"}, "sections": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_scan_begin = heapam_index_scan_begin,\n\t.index_scan_reset = heapam_index_scan_reset,\n\t.index_scan_end = heapam_index_scan_end,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.fetch_tid = heapam_fetch_tid,\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filelocator = heapam_relation_set_new_filelocator,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "description_zh": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002 \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a", "description_zh_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span class=\"productname\">PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em class=\"firstterm\">\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a class=\"link\" href=\"/zh/docs/devel/catalog-pg-am.html\"><code class=\"structname\">pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code class=\"structname\">pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em class=\"firstterm\">\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a class=\"xref\" href=\"/zh/docs/devel/sql-create-access-method.html\"><span class=\"refentrytitle\">CREATE ACCESS METHOD</span></a> \u548c <a class=\"xref\" href=\"/zh/docs/devel/sql-drop-access-method.html\"><span class=\"refentrytitle\">DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code class=\"type\">internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code class=\"type\">table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\n </p><p>\n  \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a\n </p><p><a href=\"/zh/docs/devel/tableam.html\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>"}, "summary": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002 \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a", "version": "20", "link_map": {"/zh/docs/devel/tableam.html": "/docs/devel/tableam.html", "/zh/docs/devel/catalog-pg-am.html": "/docs/devel/catalog-pg-am.html", "/zh/docs/devel/sql-drop-access-method.html": "/docs/devel/sql-drop-access-method.html", "/zh/docs/devel/sql-create-access-method.html": "/docs/devel/sql-create-access-method.html"}, "body_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span>PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em>\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a href=\"/zh/docs/devel/catalog-pg-am.html\" rel=\"nofollow\"><code>pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code>pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em>\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a href=\"/zh/docs/devel/sql-create-access-method.html\" rel=\"nofollow\"><span>CREATE ACCESS METHOD</span></a> \u548c <a href=\"/zh/docs/devel/sql-drop-access-method.html\" rel=\"nofollow\"><span>DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code>internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code>table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\n </p><p>\n  \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a\n </p><p><a href=\"/zh/docs/devel/tableam.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>", "body_sha256": "228682e67130077c6b9505e9928ce6031aff01713b9189385456dafe6f805c5a", "content_hash": "41a9e80c27808cbd9d56565502e0c52898970507cead2a1d0f7d44f7dfa7cab4", "source_database": "center", "source_revision": "49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac"}, "tables_zh": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_scan_begin", "implementation": "heapam_index_scan_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "fetch_tid", "implementation": "heapam_fetch_tid"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "description": ["\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002 \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a"], "manual_html": "", "manual_path": "/docs/devel/tableam.html", "sections_zh": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_scan_begin = heapam_index_scan_begin,\n\t.index_scan_reset = heapam_index_scan_reset,\n\t.index_scan_end = heapam_index_scan_end,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.fetch_tid = heapam_fetch_tid,\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filelocator = heapam_relation_set_new_filelocator,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "localization": {"status": "complete", "sources": [{"url": "/docs/devel/tableam.html", "method": "same-major semantic node", "sha256": "9a8d65b3ad58687f074f2f6307971ef7aa9443bd56a99be289ea41806362435c", "language": "zh", "matched_nodes": ["#TABLEAM/p[11]", "#TABLEAM/p[13]", "#TABLEAM/p[15]", "#TABLEAM/p[16]", "#TABLEAM/p[3]", "#TABLEAM/p[4]", "#TABLEAM/p[5]", "#TABLEAM/p[6]", "#TABLEAM/p[8]", "#TABLEAM/p[9]"]}], "language": "zh", "original_text": {"/summary": "The built-in heap table access method integrates tuple storage, visibility, scans, index fetches and maintenance with PostgreSQL.", "/category": "Core table AM", "/versions/20/description/0": "The built-in heap table access method integrates tuple storage, visibility, scans, index fetches and maintenance with PostgreSQL.", "/versions/20/facts/0/label": "Interface family", "/versions/20/facts/0/value": "Table access method", "/versions/20/facts/1/label": "Handler or routine", "/versions/20/facts/2/label": "Recorded callbacks", "/versions/20/tables/0/title": "Registered interface handlers", "/versions/20/related/0/label": "System catalog pg_am", "/versions/20/related/2/label": "Index AM", "/versions/20/sections/0/title": "Interface and capability boundaries", "/versions/20/sections/1/title": "Heap storage, visibility and WAL", "/versions/20/sections/2/title": "Registered implementation in core source", "/versions/20/tables/0/rows/0/state": "Handler registered; conditions apply", "/versions/20/tables/0/rows/1/state": "Handler registered; conditions apply", "/versions/20/tables/0/rows/2/state": "Handler registered; conditions apply", "/versions/20/tables/0/rows/3/state": "Handler registered; conditions apply", "/versions/20/tables/0/rows/4/state": "Handler registered; conditions apply", "/versions/20/tables/0/rows/5/state": "Handler registered; conditions apply", "/versions/20/tables/0/rows/6/state": "Handler registered; conditions apply", "/versions/20/tables/0/rows/7/state": "Handler registered; conditions apply", "/versions/20/tables/0/rows/8/state": "Handler registered; conditions apply", "/versions/20/tables/0/rows/9/state": "Handler registered; conditions apply", "/versions/20/tables/0/rows/10/state": "Handler registered; conditions apply", "/versions/20/sections/0/paragraphs/0": "The matrix records callbacks actually registered in this source build. Registration identifies an implemented interface hook; options, query shape, privileges and provider rules determine whether an operation is allowed.", "/versions/20/sections/0/paragraphs/1": "The complete same-version manual below retains configuration, constraints and examples. No runtime capability test is claimed.", "/versions/20/sections/1/paragraphs/0": "This inventory starts with the Table AM interface in PostgreSQL 12. Earlier PostgreSQL heap storage is not relabeled as a Table AM implementation.", "/versions/20/sections/1/paragraphs/1": "Heap visibility follows PostgreSQL snapshots. WAL and crash-recovery behavior depend on relation persistence; temporary and unlogged tables differ from permanent tables. Index access methods remain separate from the table storage interface.", "/versions/20/tables/0/rows/0/feature": "Tuple slot", "/versions/20/tables/0/rows/1/feature": "Begin scan", "/versions/20/tables/0/rows/2/feature": "Parallel scan initialization", "/versions/20/tables/0/rows/3/feature": "Begin index lookup", "/versions/20/tables/0/rows/4/feature": "Fetch identified tuple", "/versions/20/tables/0/rows/5/feature": "Insert tuple", "/versions/20/tables/0/rows/6/feature": "Update tuple", "/versions/20/tables/0/rows/7/feature": "Delete tuple", "/versions/20/tables/0/rows/8/feature": "Vacuum relation", "/versions/20/tables/0/rows/9/feature": "Analyze block", "/versions/20/tables/0/columns/0/label": "Interface operation", "/versions/20/tables/0/columns/1/label": "Source observation", "/versions/20/tables/0/columns/2/label": "Callback", "/versions/20/tables/0/columns/3/label": "Implementation", "/versions/20/tables/0/rows/10/feature": "TOAST decision", "/versions/20/collection_tables/0/title": "Table AM candidates", "/versions/20/collection_tables/1/title": "Primary-source capability observations", "/versions/20/collection_tables/0/caption": "Current catalogue observation 2026-09-29 from pgext.universe. Extension versions, source metadata dates and declared PostgreSQL compatibility are independent of the selected core version. Catalogue classification does not establish capabilities or maintenance support.", "/versions/20/collection_tables/1/caption": "Each statement applies to its named extension version and immutable source revision. Unlisted capabilities remain unknown. These are documentation observations, not runtime tests or current maintenance guarantees.", "/versions/20/collection_tables/0/rows/0/scope": "Catalogue candidate; interface unverified", "/versions/20/collection_tables/0/rows/1/scope": "Catalogue candidate; interface unverified", "/versions/20/collection_tables/0/rows/2/scope": "Catalogue candidate; interface unverified", "/versions/20/collection_tables/0/rows/3/scope": "Catalogue candidate; interface unverified", "/versions/20/collection_tables/0/rows/4/scope": "Catalogue candidate; interface unverified", "/versions/20/collection_tables/0/rows/5/scope": "Catalogue candidate; interface unverified", "/versions/20/collection_tables/0/rows/6/scope": "Catalogue candidate; interface unverified", "/versions/20/collection_tables/0/rows/7/scope": "Catalogue candidate; interface unverified", "/versions/20/collection_tables/0/rows/8/scope": "Catalogue candidate; interface unverified", "/versions/20/collection_tables/0/rows/9/scope": "Catalogue candidate; interface unverified", "/versions/20/collection_tables/1/rows/0/state": "Verified in documentation", "/versions/20/collection_tables/1/rows/1/state": "Conditional", "/versions/20/collection_tables/1/rows/2/state": "Conditional", "/versions/20/collection_tables/1/rows/3/state": "Verified limitation", "/versions/20/collection_tables/1/rows/4/state": "Unknown", "/versions/20/collection_tables/0/rows/10/scope": "Catalogue candidate; interface unverified", "/versions/20/collection_tables/0/rows/11/scope": "Catalogue candidate; interface unverified", "/versions/20/collection_tables/0/rows/12/scope": "Catalogue candidate; interface unverified", "/versions/20/collection_tables/0/rows/13/scope": "Catalogue candidate; interface unverified", "/versions/20/collection_tables/0/rows/14/scope": "Catalogue candidate; interface unverified", "/versions/20/collection_tables/0/rows/15/scope": "Catalogue candidate; interface unverified", "/versions/20/collection_tables/0/rows/16/scope": "Catalogue candidate; interface unverified", "/versions/20/collection_tables/0/rows/17/scope": "Catalogue candidate; interface unverified", "/versions/20/collection_tables/0/rows/18/scope": "Catalogue candidate; interface unverified", "/versions/20/collection_tables/0/rows/19/scope": "Catalogue candidate; interface unverified", "/versions/20/collection_tables/0/rows/20/scope": "Catalogue candidate; interface unverified", "/versions/20/collection_tables/0/rows/21/scope": "Primary documentation reviewed separately below", "/versions/20/collection_tables/0/rows/22/scope": "Catalogue candidate; interface unverified", "/versions/20/collection_tables/1/rows/0/detail": "Native columnar Table AM. This reviewed version is an alpha release.", "/versions/20/collection_tables/1/rows/1/detail": "The planner can create parallel columnar scans; cost and worker settings determine plan selection.", "/versions/20/collection_tables/1/rows/2/detail": "Its own vacuum performs no parallel work. CLUSTER, VACUUM FULL and REPACK are rejected; extension compaction functions provide alternatives.", "/versions/20/collection_tables/1/rows/3/detail": "Sampling a columnar table raises an unsupported-operation error.", "/versions/20/collection_tables/1/rows/4/detail": "No distributed transaction guarantee was established by this review.", "/versions/20/collection_tables/0/columns/0/label": "Existing extension", "/versions/20/collection_tables/0/columns/1/label": "Catalogued version", "/versions/20/collection_tables/0/columns/2/label": "Declared PG majors", "/versions/20/collection_tables/0/columns/3/label": "Metadata checked", "/versions/20/collection_tables/0/columns/4/label": "Evidence scope", "/versions/20/collection_tables/0/columns/5/label": "Catalogued purpose", "/versions/20/collection_tables/0/rows/5/postgres": "Unknown", "/versions/20/collection_tables/0/rows/7/postgres": "Unknown", "/versions/20/collection_tables/1/columns/0/label": "Extension", "/versions/20/collection_tables/1/columns/1/label": "Reviewed version", "/versions/20/collection_tables/1/columns/2/label": "Capability", "/versions/20/collection_tables/1/columns/3/label": "Evidence state", "/versions/20/collection_tables/1/columns/4/label": "Conditions", "/versions/20/collection_tables/1/columns/5/label": "Evidence date and source", "/versions/20/collection_tables/0/rows/11/postgres": "Unknown", "/versions/20/collection_tables/0/rows/12/postgres": "Unknown", "/versions/20/collection_tables/0/rows/13/postgres": "Unknown", "/versions/20/collection_tables/0/rows/14/postgres": "Unknown", "/versions/20/collection_tables/0/rows/15/postgres": "Unknown", "/versions/20/collection_tables/0/rows/16/postgres": "Unknown", "/versions/20/collection_tables/0/rows/18/postgres": "Unknown", "/versions/20/collection_tables/0/rows/22/postgres": "Unknown", "/versions/20/collection_tables/1/rows/0/capability": "Table AM identity", "/versions/20/collection_tables/1/rows/1/capability": "Parallel scans", "/versions/20/collection_tables/1/rows/4/capability": "Distributed transaction guarantees", "/versions/20/collection_tables/0/rows/0/description": "Citus columnar storage engine", "/versions/20/collection_tables/0/rows/1/description": "Hydra Columnar extension", "/versions/20/collection_tables/0/rows/2/description": "Columnstore Table in Postgres", "/versions/20/collection_tables/0/rows/3/description": "colcompress and rowcompress Table Access Methods with vectorized execution", "/versions/20/collection_tables/0/rows/4/description": "Experimental append-only compressed table access method for PostgreSQL 12 and later.", "/versions/20/collection_tables/0/rows/5/description": "UNDO storage table access method with in-place updates", "/versions/20/collection_tables/0/rows/6/description": "Experimental table access method for transparent AES-256-CBC encryption of selected column types.", "/versions/20/collection_tables/0/rows/7/description": "PostgreSQL table access method that avoids fragmentation of variable-length append-only data.", "/versions/20/collection_tables/0/rows/8/description": "Experimental PostgreSQL table access method backed by Redis storage.", "/versions/20/collection_tables/0/rows/9/description": "Generates random test data through a PostgreSQL FDW, with an experimental table access method.", "/versions/20/collection_tables/0/rows/10/description": "Columnar PostgreSQL table access method powered by DuckDB and Parquet storage.", "/versions/20/collection_tables/0/rows/11/description": "CSV table access method for PostgreSQL that stores table tuples in CSV-formatted relation files.", "/versions/20/collection_tables/0/rows/12/description": "Experimental in-memory PostgreSQL table access method implemented as a C extension.", "/versions/20/collection_tables/0/rows/13/description": "GFS copy-on-read storage: a Table Access Method whose missing rows are fetched from the source on read and written through locally", "/versions/20/collection_tables/0/rows/14/description": "Delta table access method skeleton", "/versions/20/collection_tables/0/rows/15/description": "Simple table access method that just prints out what functions in the access methods and related functions that are called.", "/versions/20/collection_tables/0/rows/16/description": "TreeDB table access method (Phase 0 prototype)", "/versions/20/collection_tables/0/rows/17/description": "Transparent data encryption for upstream PostgreSQL using the tde_heap access method, including tables, indexes, TOAST, WAL, and temporary files.", "/versions/20/collection_tables/0/rows/18/description": "EDB table access method that preserves clustering locality during inserts.", "/versions/20/collection_tables/0/rows/19/description": "Append-only compressed table access method for time-series workloads.", "/versions/20/collection_tables/0/rows/20/description": "Experimental table access method for compact, cache-friendly row storage.", "/versions/20/collection_tables/0/rows/21/description": "Native column-oriented table access method with compression, vectorized scans, and Parquet workflows.", "/versions/20/collection_tables/0/rows/22/description": "EDB table access method for frequently read, rarely changed reference data."}, "fallback_fields": [], "source_language": "en", "extension_sources": [{"method": "existing extension catalogue", "sha256": "20335bd9693c9f63c07a3e73dbc12db922d36159c0443ecd8918f93e48e9e285", "extension": "citus_columnar"}, {"method": "existing extension catalogue", "sha256": "6c84267c58539dda1d2f99fe2df63fa02fc78f246f382384dc85644bd862816a", "extension": "columnar"}, {"method": "existing extension catalogue", "sha256": "581469ddc7c1660c4c035b66e3728aa821908d19c47a78bb7a474bf1760808f4", "extension": "pg_mooncake"}, {"method": "existing extension catalogue", "sha256": "979a31fb5bf0c2572a5dd40881dc9c5fe402ab445ecc455b44d12208ce28b88f", "extension": "storage_engine"}, {"method": "existing extension catalogue", "sha256": "8143ef25f860518865fb520abfcd92204773911c22d8eea76db8e248ebab53be", "extension": "pg_cryogen"}, {"method": "existing extension catalogue", "sha256": "47025c18c040a44f307e1d084ecb8835596a68a0ca660bf300cd5cbe90296139", "extension": "undam"}, {"method": "existing extension catalogue", "sha256": "2619e6b72919c7671c2213b137de80859852cf0fb58ba2cb14d396feaab94864", "extension": "tcle"}, {"method": "existing extension catalogue", "sha256": "ba3b4738492858bc424c38c9aadd75281849ef5e14ec61f8c44c70271fc23eea", "extension": "append_only_heap"}, {"method": "existing extension catalogue", "sha256": "3118358ef7aff737530d418a1220be85ce1a438f1a34c2ced63a452e4cb6277a", "extension": "redis_backed_storage"}, {"method": "existing extension catalogue", "sha256": "58e087a0fc13c45beb89a6637b8c63f1f8d2e39b896f4a9276f512d078b78c5f", "extension": "pgrand"}, {"method": "existing extension catalogue", "sha256": "e703e2075dbaf03e9f6790370cad43191e2edef6136b59e2fdf3ceee0ced13f7", "extension": "pg_elephantduck"}, {"method": "existing extension catalogue", "sha256": "79c940558dad3acad37515f894fb860803640c828f4f78a61a098c9d0bb5fc0a", "extension": "csv_tam"}, {"method": "existing extension catalogue", "sha256": "fff0b076b794d2c6555bc05cc415df67e2afd770e845f9337224aa6a6a7e058d", "extension": "pgtam"}, {"method": "existing extension catalogue", "sha256": "3c043ec47221c89c6ce9a0e0cdfc0e2c183392e37c1f10055240002e0e46c3e5", "extension": "gfs"}, {"method": "existing extension catalogue", "sha256": "4ea167029ea771f5c5b91286f6007888df24ec9a7276fa3d7632d14de505011e", "extension": "pg_delta_am"}, {"method": "existing extension catalogue", "sha256": "61162bb2c19ead381967af3c48ffcfa9cc4bc5c6330e67b0330c77703e84ccab", "extension": "traceam"}, {"method": "existing extension catalogue", "sha256": "413fddf6b3506cffe728b03e0575107b989c9b3c91bdf4831185921aa106a279", "extension": "treedb_pgext"}, {"method": "existing extension catalogue", "sha256": "2e123f76446f7fafd09f4c8a6b3e3dad53a70408daefdcbba00c91bb509ac08a", "extension": "open_pg_tde"}, {"method": "existing extension catalogue", "sha256": "9e9f691b45951b98a306ac162ed9b68ca68832b3470189d681a79f004d2808a4", "extension": "autocluster"}, {"method": "existing extension catalogue", "sha256": "928c51203a4254e39c27b755e2936417d1cb5a717360f88769d611a9e8f37efd", "extension": "bluefin"}, {"method": "existing extension catalogue", "sha256": "c6eb1dcdef8335570b5868de9c873d350322f7a9fc0c1f857cc4b69644a1a376", "extension": "optimized_row_format"}, {"method": "existing extension catalogue", "sha256": "1b574424a40c8a9bc7cd3b63143a83bb752f480a6ec8fdccc5efe9f65d4f384f", "extension": "pgcolumnar"}, {"method": "existing extension catalogue", "sha256": "55db1a48b302678a400c712f709391a950caef5b4c0b982a3143d8eb891be8b1", "extension": "refdata"}], "original_snapshot_sha256": "449d9d6df40faa2a20b43e6496989046459689d0bb50c2eced13bba6082134c5", "canonical_center_text_hash": "41a9e80c27808cbd9d56565502e0c52898970507cead2a1d0f7d44f7dfa7cab4"}, "evidence_kind": "source and documentation", "description_zh": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002 \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a", "comparison_data": {"options": [], "callbacks": {"scan_end": "heap_endscan", "fetch_tid": "heapam_fetch_tid", "scan_begin": "heap_beginscan", "tuple_lock": "heapam_tuple_lock", "scan_rescan": "heap_rescan", "multi_insert": "heap_multi_insert", "tuple_delete": "heapam_tuple_delete", "tuple_insert": "heapam_tuple_insert", "tuple_update": "heapam_tuple_update", "relation_size": "table_block_relation_size", "index_scan_end": "heapam_index_scan_end", "slot_callbacks": "heapam_slot_callbacks", "relation_vacuum": "heap_vacuum_rel", "tuple_tid_valid": "heapam_tuple_tid_valid", "index_scan_begin": "heapam_index_scan_begin", "index_scan_reset": "heapam_index_scan_reset", "scan_getnextslot": "heap_getnextslot", "relation_toast_am": "heapam_relation_toast_am", "scan_set_tidrange": "heap_set_tidrange", "relation_copy_data": "heapam_relation_copy_data", "index_delete_tuples": "heap_index_delete_tuples", "index_validate_scan": "heapam_index_validate_scan", "tuple_get_latest_tid": "heap_get_latest_tid", "parallelscan_estimate": "table_block_parallelscan_estimate", "index_build_range_scan": "heapam_index_build_range_scan", "relation_estimate_size": "heapam_estimate_rel_size", "scan_bitmap_next_tuple": "heapam_scan_bitmap_next_tuple", "scan_sample_next_block": "heapam_scan_sample_next_block", "scan_sample_next_tuple": "heapam_scan_sample_next_tuple", "parallelscan_initialize": "table_block_parallelscan_initialize", "scan_analyze_next_block": "heapam_scan_analyze_next_block", "scan_analyze_next_tuple": "heapam_scan_analyze_next_tuple", "tuple_fetch_row_version": "heapam_fetch_row_version", "tuple_insert_speculative": "heapam_tuple_insert_speculative", "tuple_satisfies_snapshot": "heapam_tuple_satisfies_snapshot", "parallelscan_reinitialize": "table_block_parallelscan_reinitialize", "relation_copy_for_cluster": "heapam_relation_copy_for_cluster", "scan_getnextslot_tidrange": "heap_getnextslot_tidrange", "relation_fetch_toast_slice": "heap_fetch_toast_slice", "relation_needs_toast_table": "heapam_relation_needs_toast_table", "tuple_complete_speculative": "heapam_tuple_complete_speculative", "relation_set_new_filelocator": "heapam_relation_set_new_filelocator", "relation_nontransactional_truncate": "heapam_relation_nontransactional_truncate"}, "source_options": [], "protocol_versions": {}}, "comparison_hash": "6d11ecc470cf242732e93216296530e2737359721fd9832ecfc769e7062f62d7", "manual_language": "zh", "runtime_verified": false, "collection_tables": [{"key": "tableam-catalogue", "rows": [{"scope": "\u76ee\u5f55\u5019\u9009\u9879\uff1b\u63a5\u53e3\u5c1a\u672a\u6838\u9a8c", "checked": "2026-08-30", "version": "14.2.0", "postgres": "16, 17, 18", "extension": {"url": "/e/citus_columnar/", "text": "citus_columnar"}, "description": "Citus \u5217\u5f0f\u5b58\u50a8\u5f15\u64ce"}, {"scope": "\u76ee\u5f55\u5019\u9009\u9879\uff1b\u63a5\u53e3\u5c1a\u672a\u6838\u9a8c", "checked": "2026-08-30", "version": "1.1.2", "postgres": "14, 15, 16", "extension": {"url": "/e/columnar/", "text": "columnar"}, "description": "\u5f00\u6e90\u5217\u5f0f\u5b58\u50a8\u6269\u5c55"}, {"scope": "\u76ee\u5f55\u5019\u9009\u9879\uff1b\u63a5\u53e3\u5c1a\u672a\u6838\u9a8c", "checked": "2026-08-30", "version": "0.2.0", "postgres": "14, 15, 16, 17, 18", "extension": {"url": "/e/pg_mooncake/", "text": "pg_mooncake"}, "description": "PostgreSQL\u5217\u5f0f\u5b58\u50a8\u8868"}, {"scope": "\u76ee\u5f55\u5019\u9009\u9879\uff1b\u63a5\u53e3\u5c1a\u672a\u6838\u9a8c", "checked": "2026-08-30", "version": "2.4.0", "postgres": "15, 16, 17, 18", "extension": {"url": "/e/storage_engine/", "text": "storage_engine"}, "description": "\u5e26\u5411\u91cf\u5316\u6267\u884c\u7684 colcompress \u4e0e rowcompress \u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"scope": "\u76ee\u5f55\u5019\u9009\u9879\uff1b\u63a5\u53e3\u5c1a\u672a\u6838\u9a8c", "checked": "2026-08-30", "version": "0.1", "postgres": "12, 13, 14, 15, 16, 17, 18", "extension": {"url": "/e/pg_cryogen/", "text": "pg_cryogen"}, "description": "\u9762\u5411 PostgreSQL 12 \u53ca\u66f4\u9ad8\u7248\u672c\u7684\u5b9e\u9a8c\u6027\u53ea\u8ffd\u52a0\u538b\u7f29\u8868\u8bbf\u95ee\u65b9\u6cd5\u3002"}, {"scope": "\u76ee\u5f55\u5019\u9009\u9879\uff1b\u63a5\u53e3\u5c1a\u672a\u6838\u9a8c", "checked": "2026-08-30", "version": "0.1", "postgres": "\u672a\u77e5", "extension": {"url": "/e/undam/", "text": "undam"}, "description": "\u57fa\u4e8e\u64a4\u9500\u94fe\u548c\u539f\u5730\u66f4\u65b0\u7684 PostgreSQL \u8868\u8bbf\u95ee\u65b9\u6cd5\u3002"}, {"scope": "\u76ee\u5f55\u5019\u9009\u9879\uff1b\u63a5\u53e3\u5c1a\u672a\u6838\u9a8c", "checked": "2026-08-30", "version": "1.0", "postgres": "12, 13", "extension": {"url": "/e/tcle/", "text": "tcle"}, "description": "\u901a\u8fc7\u8868\u8bbf\u95ee\u65b9\u6cd5\u900f\u660e\u52a0\u5bc6\u6307\u5b9a\u5217\u7c7b\u578b\u7684\u5b9e\u9a8c\u6027 AES-256-CBC \u6269\u5c55\u3002"}, {"scope": "\u76ee\u5f55\u5019\u9009\u9879\uff1b\u63a5\u53e3\u5c1a\u672a\u6838\u9a8c", "checked": "2026-08-30", "version": "1.0", "postgres": "\u672a\u77e5", "extension": {"url": "/e/append_only_heap/", "text": "append_only_heap"}, "description": "\u4e00\u79cd PostgreSQL \u8868\u8bbf\u95ee\u65b9\u6cd5\uff0c\u901a\u8fc7\u53ea\u8ffd\u52a0\u5199\u5165\u53ef\u53d8\u957f\u5ea6\u6570\u636e\u6765\u51cf\u5c11\u788e\u7247\u3002"}, {"scope": "\u76ee\u5f55\u5019\u9009\u9879\uff1b\u63a5\u53e3\u5c1a\u672a\u6838\u9a8c", "checked": "2026-08-30", "version": "0.0.0", "postgres": "11, 12, 13, 14, 15, 16", "extension": {"url": "/e/redis_backed_storage/", "text": "redis_backed_storage"}, "description": "\u4e00\u4e2a\u5b9e\u9a8c\u6027\u7684 PostgreSQL \u8868\u8bbf\u95ee\u65b9\u6cd5\u6269\u5c55\uff0c\u4f7f\u7528 Redis \u4f5c\u4e3a\u540e\u7aef\u5b58\u50a8\u3002"}, {"scope": "\u76ee\u5f55\u5019\u9009\u9879\uff1b\u63a5\u53e3\u5c1a\u672a\u6838\u9a8c", "checked": "2026-08-30", "version": "0.1.0", "postgres": "15, 16", "extension": {"url": "/e/pgrand/", "text": "pgrand"}, "description": "\u901a\u8fc7 PostgreSQL FDW \u751f\u6210\u968f\u673a\u6d4b\u8bd5\u6570\u636e\uff0c\u5e76\u5305\u542b\u5b9e\u9a8c\u6027\u7684\u8868\u8bbf\u95ee\u65b9\u6cd5\u3002"}, {"scope": "\u76ee\u5f55\u5019\u9009\u9879\uff1b\u63a5\u53e3\u5c1a\u672a\u6838\u9a8c", "checked": "2026-08-30", "version": "0.0.0", "postgres": "16, 17", "extension": {"url": "/e/pg_elephantduck/", "text": "pg_elephantduck"}, "description": "\u57fa\u4e8e DuckDB \u4e0e Parquet \u5b58\u50a8\u7684 PostgreSQL \u5217\u5f0f\u8868\u8bbf\u95ee\u65b9\u6cd5\u3002"}, {"scope": "\u76ee\u5f55\u5019\u9009\u9879\uff1b\u63a5\u53e3\u5c1a\u672a\u6838\u9a8c", "checked": "2026-08-30", "version": "0.0.1", "postgres": "\u672a\u77e5", "extension": {"url": "/e/csv_tam/", "text": "csv_tam"}, "description": "PostgreSQL \u7684 CSV \u8868\u8bbf\u95ee\u65b9\u6cd5\uff0c\u5c06\u8868\u5143\u7ec4\u4ee5 CSV \u683c\u5f0f\u5b58\u5165\u5173\u7cfb\u6587\u4ef6\u3002"}, {"scope": "\u76ee\u5f55\u5019\u9009\u9879\uff1b\u63a5\u53e3\u5c1a\u672a\u6838\u9a8c", "checked": "2026-08-30", "version": "0.0.1", "postgres": "\u672a\u77e5", "extension": {"url": "/e/pgtam/", "text": "pgtam"}, "description": "pgtam \u662f\u4e00\u4e2a\u4ee5 C \u6269\u5c55\u5b9e\u73b0\u7684\u5b9e\u9a8c\u6027 PostgreSQL \u5185\u5b58\u8868\u8bbf\u95ee\u65b9\u6cd5\u3002"}, {"scope": "\u76ee\u5f55\u5019\u9009\u9879\uff1b\u63a5\u53e3\u5c1a\u672a\u6838\u9a8c", "checked": "2026-08-30", "version": "0.0.1", "postgres": "\u672a\u77e5", "extension": {"url": "/e/gfs/", "text": "gfs"}, "description": "\u57fa\u4e8e\u6309\u9700\u8bfb\u53d6\u590d\u5236\u7684GFS\u5b58\u50a8\uff1a\u4e00\u79cd\u8868\u8bbf\u95ee\u65b9\u6cd5\uff0c\u7f3a\u5931\u884c\u5728\u8bfb\u53d6\u65f6\u4ece\u6e90\u83b7\u53d6\u5e76\u5728\u672c\u5730\u5199\u5165"}, {"scope": "\u76ee\u5f55\u5019\u9009\u9879\uff1b\u63a5\u53e3\u5c1a\u672a\u6838\u9a8c", "checked": "2026-08-30", "version": "0.1.0", "postgres": "\u672a\u77e5", "extension": {"url": "/e/pg_delta_am/", "text": "pg_delta_am"}, "description": "Delta \u8868\u8bbf\u95ee\u65b9\u6cd5\u9aa8\u67b6\u3002"}, {"scope": "\u76ee\u5f55\u5019\u9009\u9879\uff1b\u63a5\u53e3\u5c1a\u672a\u6838\u9a8c", "checked": "2026-08-30", "version": "0.1", "postgres": "\u672a\u77e5", "extension": {"url": "/e/traceam/", "text": "traceam"}, "description": "\u7b80\u5355\u8868\u8bbf\u95ee\u65b9\u6cd5\uff0c\u4ec5\u6253\u5370\u8c03\u7528\u7684\u8bbf\u95ee\u65b9\u6cd5\u53ca\u76f8\u5173\u51fd\u6570"}, {"scope": "\u76ee\u5f55\u5019\u9009\u9879\uff1b\u63a5\u53e3\u5c1a\u672a\u6838\u9a8c", "checked": "2026-08-30", "version": "1.0", "postgres": "\u672a\u77e5", "extension": {"url": "/e/treedb_pgext/", "text": "treedb_pgext"}, "description": "TreeDB\u8868\u8bbf\u95ee\u65b9\u6cd5\uff08\u7b2c\u4e00\u9636\u6bb5\u539f\u578b\uff09"}, {"scope": "\u76ee\u5f55\u5019\u9009\u9879\uff1b\u63a5\u53e3\u5c1a\u672a\u6838\u9a8c", "checked": "2026-08-30", "version": "2.4.0", "postgres": "16, 17, 18", "extension": {"url": "/e/open_pg_tde/", "text": "open_pg_tde"}, "description": "\u9762\u5411\u4e0a\u6e38 PostgreSQL \u7684\u900f\u660e\u6570\u636e\u52a0\u5bc6\u6269\u5c55\uff0c\u4f7f\u7528 tde_heap \u8bbf\u95ee\u65b9\u6cd5\u52a0\u5bc6\u8868\u3001\u7d22\u5f15\u3001TOAST\u3001WAL \u4e0e\u4e34\u65f6\u6587\u4ef6\u3002"}, {"scope": "\u76ee\u5f55\u5019\u9009\u9879\uff1b\u63a5\u53e3\u5c1a\u672a\u6838\u9a8c", "checked": "2026-08-31", "version": "1.7.0", "postgres": "\u672a\u77e5", "extension": {"url": "/e/autocluster/", "text": "autocluster"}, "description": "\u5728\u63d2\u5165\u65f6\u4fdd\u6301\u805a\u7c07\u5c40\u90e8\u6027\u7684 EDB \u8868\u8bbf\u95ee\u65b9\u6cd5\u3002"}, {"scope": "\u76ee\u5f55\u5019\u9009\u9879\uff1b\u63a5\u53e3\u5c1a\u672a\u6838\u9a8c", "checked": "2026-08-31", "version": "1.7.0", "postgres": "15, 16, 17, 18", "extension": {"url": "/e/bluefin/", "text": "bluefin"}, "description": "\u9762\u5411\u65f6\u5e8f\u5de5\u4f5c\u8d1f\u8f7d\u7684\u4ec5\u8ffd\u52a0\u538b\u7f29\u8868\u8bbf\u95ee\u65b9\u6cd5\u3002"}, {"scope": "\u76ee\u5f55\u5019\u9009\u9879\uff1b\u63a5\u53e3\u5c1a\u672a\u6838\u9a8c", "checked": "2026-08-31", "version": "1.0", "postgres": "17", "extension": {"url": "/e/optimized_row_format/", "text": "optimized_row_format"}, "description": "\u9762\u5411\u7d27\u51d1\u4e14\u7f13\u5b58\u53cb\u597d\u884c\u5b58\u50a8\u7684\u5b9e\u9a8c\u6027\u8868\u8bbf\u95ee\u65b9\u6cd5\u3002"}, {"scope": "\u4e0b\u65b9\u5355\u72ec\u6838\u9a8c\u4e00\u624b\u6587\u6863", "checked": "2026-09-19", "version": "1.0-alpha4", "postgres": "15, 16, 17, 18, 19", "extension": {"url": "/e/pgcolumnar/", "text": "pgcolumnar"}, "description": "\u539f\u751f\u5217\u5f0f\u8868\u8bbf\u95ee\u65b9\u6cd5\uff0c\u652f\u6301\u538b\u7f29\u3001\u5411\u91cf\u5316\u626b\u63cf\u4e0e Parquet \u5de5\u4f5c\u6d41\u3002"}, {"scope": "\u76ee\u5f55\u5019\u9009\u9879\uff1b\u63a5\u53e3\u5c1a\u672a\u6838\u9a8c", "checked": "2026-08-31", "version": "1.7.0", "postgres": "\u672a\u77e5", "extension": {"url": "/e/refdata/", "text": "refdata"}, "description": "\u9762\u5411\u9ad8\u9891\u8bfb\u53d6\u3001\u4f4e\u9891\u53d8\u66f4\u53c2\u8003\u6570\u636e\u7684 EDB \u8868\u8bbf\u95ee\u65b9\u6cd5\u3002"}], "title": "\u8868\u8bbf\u95ee\u65b9\u6cd5\u5019\u9009", "caption": "\u6765\u81ea pgext.universe \u7684\u76ee\u5f55\u89c2\u5bdf\uff0c\u65e5\u671f\u4e3a 2026-09-29\u3002\u6269\u5c55\u7248\u672c\u3001\u6765\u6e90\u5143\u6570\u636e\u65e5\u671f\u548c\u58f0\u660e\u7684 PostgreSQL \u517c\u5bb9\u8303\u56f4\u5747\u72ec\u7acb\u4e8e\u6240\u9009\u6838\u5fc3\u7248\u672c\u3002\u76ee\u5f55\u5206\u7c7b\u4e0d\u80fd\u8bc1\u660e\u5177\u4f53\u80fd\u529b\u6216\u7ef4\u62a4\u652f\u6301\u3002", "columns": [{"key": "extension", "label": "\u73b0\u6709\u6269\u5c55"}, {"key": "version", "label": "\u76ee\u5f55\u8bb0\u8f7d\u7684\u7248\u672c"}, {"key": "postgres", "label": "\u58f0\u660e\u517c\u5bb9\u7684 PG \u5927\u7248\u672c"}, {"key": "checked", "label": "\u5143\u6570\u636e\u6838\u9a8c\u65f6\u95f4"}, {"key": "scope", "label": "\u8bc1\u636e\u8303\u56f4"}, {"key": "description", "label": "\u76ee\u5f55\u8bb0\u8f7d\u7684\u7528\u9014"}]}, {"key": "tableam-reviewed-capabilities", "rows": [{"state": "\u6587\u6863\u5df2\u8bc1\u5b9e", "detail": "\u539f\u751f\u5217\u5f0f Table AM\u3002\u672c\u6b21\u6838\u9a8c\u7684\u7248\u672c\u662f alpha \u9884\u53d1\u5e03\u7248\u3002", "version": "1.0-alpha4", "evidence": {"url": "https://github.com/commandprompt/pgcolumnar/blob/0d3100dd4fa76d1b915826be742e9286f621bc29/README.md", "text": "2026-09-29 \u00b7 0d3100dd4fa7 \u00b7 README.md"}, "extension": {"url": "/e/pgcolumnar/", "text": "pgcolumnar"}, "capability": "Table AM \u8eab\u4efd"}, {"state": "\u6709\u6761\u4ef6", "detail": "\u89c4\u5212\u5668\u53ef\u4ee5\u751f\u6210\u5e76\u884c\u5217\u5f0f\u626b\u63cf\uff1b\u662f\u5426\u9009\u7528\u53d6\u51b3\u4e8e\u6210\u672c\u548c\u5de5\u4f5c\u8fdb\u7a0b\u8bbe\u7f6e\u3002", "version": "1.0-alpha4", "evidence": {"url": "https://github.com/commandprompt/pgcolumnar/blob/0d3100dd4fa76d1b915826be742e9286f621bc29/docs/limitations.md", "text": "2026-09-29 \u00b7 0d3100dd4fa7 \u00b7 docs/limitations.md"}, "extension": {"url": "/e/pgcolumnar/", "text": "pgcolumnar"}, "capability": "\u5e76\u884c\u626b\u63cf"}, {"state": "\u6709\u6761\u4ef6", "detail": "\u81ea\u8eab\u7684 vacuum \u4e0d\u6267\u884c\u5e76\u884c\u5de5\u4f5c\u3002\u62d2\u7edd CLUSTER\u3001VACUUM FULL \u548c REPACK\uff1b\u6269\u5c55\u63d0\u4f9b\u538b\u7f29\u6574\u7406\u51fd\u6570\u4f5c\u4e3a\u66ff\u4ee3\u3002", "version": "1.0-alpha4", "evidence": {"url": "https://github.com/commandprompt/pgcolumnar/blob/0d3100dd4fa76d1b915826be742e9286f621bc29/docs/limitations.md", "text": "2026-09-29 \u00b7 0d3100dd4fa7 \u00b7 docs/limitations.md"}, "extension": {"url": "/e/pgcolumnar/", "text": "pgcolumnar"}, "capability": "Maintenance"}, {"state": "\u5df2\u6838\u9a8c\u7684\u9650\u5236", "detail": "\u5bf9\u5217\u5f0f\u8868\u8fdb\u884c\u91c7\u6837\u4f1a\u62a5\u64cd\u4f5c\u4e0d\u652f\u6301\u9519\u8bef\u3002", "version": "1.0-alpha4", "evidence": {"url": "https://github.com/commandprompt/pgcolumnar/blob/0d3100dd4fa76d1b915826be742e9286f621bc29/docs/limitations.md", "text": "2026-09-29 \u00b7 0d3100dd4fa7 \u00b7 docs/limitations.md"}, "extension": {"url": "/e/pgcolumnar/", "text": "pgcolumnar"}, "capability": "TABLESAMPLE"}, {"state": "\u672a\u77e5", "detail": "\u672c\u6b21\u6838\u9a8c\u672a\u786e\u8ba4\u5206\u5e03\u5f0f\u4e8b\u52a1\u4fdd\u8bc1\u3002", "version": "1.0-alpha4", "evidence": {"url": "https://github.com/commandprompt/pgcolumnar/blob/0d3100dd4fa76d1b915826be742e9286f621bc29/README.md", "text": "2026-09-29 \u00b7 0d3100dd4fa7 \u00b7 README.md"}, "extension": {"url": "/e/pgcolumnar/", "text": "pgcolumnar"}, "capability": "\u5206\u5e03\u5f0f\u4e8b\u52a1\u4fdd\u8bc1"}], "title": "\u4e00\u624b\u6765\u6e90\u8bb0\u8f7d\u7684\u80fd\u529b", "caption": "\u6bcf\u9879\u58f0\u660e\u4ec5\u9002\u7528\u4e8e\u5176\u4e2d\u6307\u660e\u7684\u6269\u5c55\u7248\u672c\u548c\u56fa\u5b9a\u6765\u6e90\u4fee\u8ba2\u3002\u672a\u5217\u51fa\u7684\u80fd\u529b\u4ecd\u4e3a\u672a\u77e5\u3002\u8fd9\u4e9b\u662f\u6587\u6863\u89c2\u5bdf\uff0c\u4e0d\u662f\u8fd0\u884c\u65f6\u6d4b\u8bd5\u6216\u5f53\u524d\u7ef4\u62a4\u4fdd\u8bc1\u3002", "columns": [{"key": "extension", "label": "\u6269\u5c55"}, {"key": "version", "label": "\u5df2\u6838\u9a8c\u7248\u672c"}, {"key": "capability", "label": "\u80fd\u529b"}, {"key": "state", "label": "\u8bc1\u636e\u72b6\u6001"}, {"key": "detail", "label": "\u9002\u7528\u6761\u4ef6"}, {"key": "evidence", "label": "\u8bc1\u636e\u65e5\u671f\u4e0e\u6765\u6e90"}]}], "extension_reviews": [{"kind": "tableam", "name": "pgcolumnar", "claims": [{"text": "Native columnar Table AM. This reviewed version is an alpha release.", "label": "Table AM identity", "state": "Verified in documentation"}, {"text": "The planner can create parallel columnar scans; cost and worker settings determine plan selection.", "label": "Parallel scans", "state": "Conditional", "source": 1}, {"text": "Its own vacuum performs no parallel work. CLUSTER, VACUUM FULL and REPACK are rejected; extension compaction functions provide alternatives.", "label": "Maintenance", "state": "Conditional", "source": 1}, {"text": "Sampling a columnar table raises an unsupported-operation error.", "label": "TABLESAMPLE", "state": "Verified limitation", "source": 1}, {"text": "No distributed transaction guarantee was established by this review.", "label": "Distributed transaction guarantees", "state": "Unknown"}], "sources": [{"url": "https://github.com/commandprompt/pgcolumnar/blob/0d3100dd4fa76d1b915826be742e9286f621bc29/README.md", "path": "README.md", "sha256": "dd3196db0ded36ff24d23bf5feb4e2163af784f3b7c0adc9cfc478497a1d5594", "local_name": "pgcolumnar-readme.txt"}, {"url": "https://github.com/commandprompt/pgcolumnar/blob/0d3100dd4fa76d1b915826be742e9286f621bc29/docs/limitations.md", "path": "docs/limitations.md", "sha256": "0133a61c17deba51ffd8e935785614c8e456bb52afe78de465d76f9524c6f521", "local_name": "pgcolumnar-limitations.txt"}], "version": "1.0-alpha4", "revision": "0d3100dd4fa76d1b915826be742e9286f621bc29", "checked_at": "2026-09-29"}], "catalog_observation": {"sha256": "a8f35f83709025575037ce50331f20fc27727e478464e35b48bb501e687cc121", "source": "data.pgext.universe", "identities": [{"id": 2401, "name": "citus_columnar"}, {"id": 2410, "name": "columnar"}, {"id": 2440, "name": "pg_mooncake"}, {"id": 2450, "name": "storage_engine"}, {"id": 100054, "name": "pg_cryogen"}, {"id": 100158, "name": "undam"}, {"id": 100199, "name": "tcle"}, {"id": 100517, "name": "append_only_heap"}, {"id": 100860, "name": "redis_backed_storage"}, {"id": 100918, "name": "pgrand"}, {"id": 100934, "name": "pg_elephantduck"}, {"id": 100973, "name": "csv_tam"}, {"id": 101123, "name": "pgtam"}, {"id": 101375, "name": "gfs"}, {"id": 101534, "name": "pg_delta_am"}, {"id": 101816, "name": "traceam"}, {"id": 101817, "name": "treedb_pgext"}, {"id": 101845, "name": "open_pg_tde"}, {"id": 101866, "name": "autocluster"}, {"id": 101868, "name": "bluefin"}, {"id": 101896, "name": "optimized_row_format"}, {"id": 101942, "name": "pgcolumnar"}, {"id": 101954, "name": "refdata"}], "observed_at": "2026-09-29T15:02:21.407129+00:00", "catalogue_rows": 2452, "candidate_count": 23}, "description_zh_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span>PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em>\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a href=\"/zh/docs/devel/catalog-pg-am.html\" rel=\"nofollow\"><code>pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code>pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em>\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a href=\"/zh/docs/devel/sql-create-access-method.html\" rel=\"nofollow\"><span>CREATE ACCESS METHOD</span></a> \u548c <a href=\"/zh/docs/devel/sql-drop-access-method.html\" rel=\"nofollow\"><span>DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code>internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code>table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\n </p><p>\n  \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a\n </p><p><a href=\"/zh/docs/devel/tableam.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>", "source_revalidation": {"kind": "static-same-version-source-and-manual-replay", "audit": "wiki-audit-20261023", "runtime_rerun": false, "compared_fields": "entity membership and source-derived facts; presentation markup normalized", "source_revision": "49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac", "previous_source_revision": "4d3346909b201ac1648232cf290462a7070c119326f56196f1f0253ed80fae41"}}}}, "snapshot": {"facts": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "43"}], "tables": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "related": [{"url": "/wiki/catalog/pg_am/?v=18", "label": "\u7cfb\u7edf\u76ee\u5f55 pg_am"}, {"url": "/wiki/guc/default_table_access_method/?v=18", "label": "default_table_access_method"}, {"url": "/wiki/indexam/?v=18", "label": "\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5"}], "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": "/docs/18/tableam.html", "path": "tableam.html", "label": "PostgreSQL 18 English manual", "sha256": "e659dece936c960dfea9e801720deb3d76abf2c3696abb3f58d32ac17d0f22aa"}, {"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "line": 2616, "path": "src/backend/access/heap/heapam_handler.c", "label": "src/backend/access/heap/heapam_handler.c:2616", "sha256": "fd60a1f8d5530ce5c33fda6b74123c3c22e8c3b9ca6455a0e5d47aa392797a1e", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, {"url": "/docs/18/mvcc-intro.html", "path": "mvcc-intro.html", "label": "PostgreSQL 18 English manual", "sha256": "456469051ccd15ec2cfa1f2e656901a3bb63414db367003215ff810d638593e1"}, {"url": "/docs/18/sql-createtable.html", "path": "sql-createtable.html", "label": "PostgreSQL 18 English manual", "sha256": "b4d703391fe1102d0e02bd6769bef928513eb7a5542f38f7448fc77fe69e0d5b"}, {"url": "/docs/18/routine-vacuuming.html", "path": "routine-vacuuming.html", "label": "PostgreSQL 18 English manual", "sha256": "ede8964df385f5bc69ae991369e6eaf99ae58aa2d6210e8bf868f090bb95b002"}, {"url": "/docs/18/catalog-pg-am.html", "path": "catalog-pg-am.html", "label": "PostgreSQL 18 English manual", "sha256": "579364179365a51945e2edb6481df5d198916c2c725e506f166824dedf08994c"}], "zh_from": {"kind": "same-version-chinese-manual-with-source-derived-identity", "manual": {"url": "/zh/docs/18/tableam.html", "anchor": "", "locale": "zh-Hans", "version": "18", "build_id": 107, "page_key": "tableam.html", "extraction": "concept-introduction", "source_hash": "5513798c8f4d2e9c76bf0d8caf92f332339bdbeb19e1bb906d44cc1e087d5e02", "fragment_sha256": "96873a2e8ad1f66e093c9294861e7feb00600a79f0d545d60715e7ad0b856019", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:08e987a66af27b98444a8057c256314eafa13611a3fb9e888214fc436824244b", "translated_from_revision": null}, "body_sha256": "85bdb6a1963e89d1415d778bb87d4525566b555ea0b69c0788315776ab9c102b", "runtime_rerun": false, "authored_translation": "source-derived-identity", "source_facts_revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, "facts_zh": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "43"}], "sections": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filelocator = heapam_relation_set_new_filelocator,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "callbacks": {"scan_end": "heap_endscan", "scan_begin": "heap_beginscan", "tuple_lock": "heapam_tuple_lock", "scan_rescan": "heap_rescan", "multi_insert": "heap_multi_insert", "tuple_delete": "heapam_tuple_delete", "tuple_insert": "heapam_tuple_insert", "tuple_update": "heapam_tuple_update", "relation_size": "table_block_relation_size", "slot_callbacks": "heapam_slot_callbacks", "index_fetch_end": "heapam_index_fetch_end", "relation_vacuum": "heap_vacuum_rel", "tuple_tid_valid": "heapam_tuple_tid_valid", "scan_getnextslot": "heap_getnextslot", "index_fetch_begin": "heapam_index_fetch_begin", "index_fetch_reset": "heapam_index_fetch_reset", "index_fetch_tuple": "heapam_index_fetch_tuple", "relation_toast_am": "heapam_relation_toast_am", "scan_set_tidrange": "heap_set_tidrange", "relation_copy_data": "heapam_relation_copy_data", "index_delete_tuples": "heap_index_delete_tuples", "index_validate_scan": "heapam_index_validate_scan", "tuple_get_latest_tid": "heap_get_latest_tid", "parallelscan_estimate": "table_block_parallelscan_estimate", "index_build_range_scan": "heapam_index_build_range_scan", "relation_estimate_size": "heapam_estimate_rel_size", "scan_bitmap_next_tuple": "heapam_scan_bitmap_next_tuple", "scan_sample_next_block": "heapam_scan_sample_next_block", "scan_sample_next_tuple": "heapam_scan_sample_next_tuple", "parallelscan_initialize": "table_block_parallelscan_initialize", "scan_analyze_next_block": "heapam_scan_analyze_next_block", "scan_analyze_next_tuple": "heapam_scan_analyze_next_tuple", "tuple_fetch_row_version": "heapam_fetch_row_version", "tuple_insert_speculative": "heapam_tuple_insert_speculative", "tuple_satisfies_snapshot": "heapam_tuple_satisfies_snapshot", "parallelscan_reinitialize": "table_block_parallelscan_reinitialize", "relation_copy_for_cluster": "heapam_relation_copy_for_cluster", "scan_getnextslot_tidrange": "heap_getnextslot_tidrange", "relation_fetch_toast_slice": "heap_fetch_toast_slice", "relation_needs_toast_table": "heapam_relation_needs_toast_table", "tuple_complete_speculative": "heapam_tuple_complete_speculative", "relation_set_new_filelocator": "heapam_relation_set_new_filelocator", "relation_nontransactional_truncate": "heapam_relation_nontransactional_truncate"}, "center_zh": {"title": "Core table AM", "locale": "zh-Hans", "source": {"key": "heap", "locale": "zh-Hans", "version": "18", "text_hash": "4c199aa6b38c042658e4f31e3a506a7ee77113bae37c87aa35d1a18adb9fb6d6", "collection": "tableam", "dataset_hash": "7c31b524dfe136022d39a6ae8dcfac6b3bbd5f8fdaf422536599981252aff0c9", "source_database": "center", "source_revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, "payload": {"facts": [{"label": "\u63a5\u53e3\u7c7b\u522b", "value": "\u8868\u8bbf\u95ee\u65b9\u6cd5"}, {"label": "\u5904\u7406\u51fd\u6570\u6216\u4f8b\u7a0b", "value": "heapam_methods"}, {"label": "\u8bb0\u5f55\u7684\u56de\u8c03", "value": "43"}], "tables": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "zh_from": {"kind": "same-version-chinese-manual-with-source-derived-identity", "manual": {"url": "/zh/docs/18/tableam.html", "anchor": "", "locale": "zh-Hans", "version": "18", "build_id": 107, "page_key": "tableam.html", "extraction": "concept-introduction", "source_hash": "5513798c8f4d2e9c76bf0d8caf92f332339bdbeb19e1bb906d44cc1e087d5e02", "fragment_sha256": "96873a2e8ad1f66e093c9294861e7feb00600a79f0d545d60715e7ad0b856019", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:08e987a66af27b98444a8057c256314eafa13611a3fb9e888214fc436824244b", "translated_from_revision": null}, "body_sha256": "85bdb6a1963e89d1415d778bb87d4525566b555ea0b69c0788315776ab9c102b", "runtime_rerun": false, "authored_translation": "source-derived-identity", "source_facts_revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, "sections": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filelocator = heapam_relation_set_new_filelocator,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "description_zh": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002 \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a", "description_zh_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span class=\"productname\">PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em class=\"firstterm\">\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a class=\"link\" href=\"/zh/docs/18/catalog-pg-am.html\"><code class=\"structname\">pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code class=\"structname\">pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em class=\"firstterm\">\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a class=\"xref\" href=\"/zh/docs/18/sql-create-access-method.html\"><span class=\"refentrytitle\">CREATE ACCESS METHOD</span></a> \u548c <a class=\"xref\" href=\"/zh/docs/18/sql-drop-access-method.html\"><span class=\"refentrytitle\">DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code class=\"type\">internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code class=\"type\">table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\n </p><p>\n  \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a\n </p><p><a href=\"/zh/docs/18/tableam.html\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>"}, "summary": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002 \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a", "version": "18", "link_map": {"/zh/docs/18/tableam.html": "/docs/18/tableam.html", "/zh/docs/18/catalog-pg-am.html": "/docs/18/catalog-pg-am.html", "/zh/docs/18/sql-drop-access-method.html": "/docs/18/sql-drop-access-method.html", "/zh/docs/18/sql-create-access-method.html": "/docs/18/sql-create-access-method.html"}, "body_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span>PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em>\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a href=\"/zh/docs/18/catalog-pg-am.html\" rel=\"nofollow\"><code>pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code>pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em>\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a href=\"/zh/docs/18/sql-create-access-method.html\" rel=\"nofollow\"><span>CREATE ACCESS METHOD</span></a> \u548c <a href=\"/zh/docs/18/sql-drop-access-method.html\" rel=\"nofollow\"><span>DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code>internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code>table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\n </p><p>\n  \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a\n </p><p><a href=\"/zh/docs/18/tableam.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>", "body_sha256": "75af8a8bb00234c2ec3ed73a5f13cf0cf2a6581dd8ce22b15a93f6feeab276fd", "content_hash": "4c199aa6b38c042658e4f31e3a506a7ee77113bae37c87aa35d1a18adb9fb6d6", "source_database": "center", "source_revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, "tables_zh": [{"key": "callbacks", "rows": [{"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5143\u7ec4\u69fd", "callback": "slot_callbacks", "implementation": "heapam_slot_callbacks"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u626b\u63cf", "callback": "scan_begin", "implementation": "heap_beginscan"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u521d\u59cb\u5316\u5e76\u884c\u626b\u63cf", "callback": "parallelscan_initialize", "implementation": "table_block_parallelscan_initialize"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5f00\u59cb\u7d22\u5f15\u67e5\u627e", "callback": "index_fetch_begin", "implementation": "heapam_index_fetch_begin"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u83b7\u53d6\u6307\u5b9a\u5143\u7ec4", "callback": "index_fetch_tuple", "implementation": "heapam_index_fetch_tuple"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u63d2\u5165\u5143\u7ec4", "callback": "tuple_insert", "implementation": "heapam_tuple_insert"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u66f4\u65b0\u5143\u7ec4", "callback": "tuple_update", "implementation": "heapam_tuple_update"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5220\u9664\u5143\u7ec4", "callback": "tuple_delete", "implementation": "heapam_tuple_delete"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5bf9\u5173\u7cfb\u6267\u884c VACUUM", "callback": "relation_vacuum", "implementation": "heap_vacuum_rel"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "\u5206\u6790\u6570\u636e\u5757", "callback": "scan_analyze_next_block", "implementation": "heapam_scan_analyze_next_block"}, {"state": "\u5df2\u6ce8\u518c\u5904\u7406\u51fd\u6570\uff1b\u9002\u7528\u6761\u4ef6\u9650\u5236", "feature": "TOAST \u5224\u5b9a", "callback": "relation_needs_toast_table", "implementation": "heapam_relation_needs_toast_table"}], "title": "\u6ce8\u518c\u7684\u63a5\u53e3\u5904\u7406\u51fd\u6570", "columns": [{"key": "feature", "label": "\u63a5\u53e3\u64cd\u4f5c"}, {"key": "state", "label": "\u6e90\u7801\u89c2\u5bdf"}, {"key": "callback", "label": "\u56de\u8c03"}, {"key": "implementation", "label": "\u5b9e\u73b0"}]}], "description": ["\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002 \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a"], "manual_html": "", "manual_path": "/docs/18/tableam.html", "sections_zh": [{"title": "\u63a5\u53e3\u4e0e\u80fd\u529b\u8fb9\u754c", "paragraphs": ["\u77e9\u9635\u8bb0\u5f55\u6b64\u6e90\u7801\u6784\u5efa\u5b9e\u9645\u6ce8\u518c\u7684\u56de\u8c03\u3002\u6ce8\u518c\u8868\u660e\u5b9e\u73b0\u4e86\u76f8\u5e94\u63a5\u53e3\u94a9\u5b50\uff1b\u64cd\u4f5c\u662f\u5426\u5141\u8bb8\u8fd8\u53d6\u51b3\u4e8e\u9009\u9879\u3001\u67e5\u8be2\u5f62\u5f0f\u3001\u6743\u9650\u548c\u63d0\u4f9b\u65b9\u89c4\u5219\u3002", "\u4e0b\u65b9\u4fdd\u7559\u540c\u7248\u672c\u5b8c\u6574\u624b\u518c\uff0c\u5305\u62ec\u914d\u7f6e\u3001\u7ea6\u675f\u548c\u793a\u4f8b\u3002\u4e0d\u58f0\u79f0\u5df2\u8fdb\u884c\u8fd0\u884c\u65f6\u80fd\u529b\u6d4b\u8bd5\u3002"]}, {"title": "\u5806\u5b58\u50a8\u3001\u53ef\u89c1\u6027\u4e0e WAL", "paragraphs": ["\u6b64\u6e05\u5355\u4ece PostgreSQL 12 \u5f15\u5165\u7684 Table AM \u63a5\u53e3\u5f00\u59cb\u3002\u4e0d\u4f1a\u5c06\u66f4\u65e9\u7248\u672c\u7684 PostgreSQL \u5806\u5b58\u50a8\u91cd\u65b0\u6807\u4e3a Table AM \u5b9e\u73b0\u3002", "\u5806\u53ef\u89c1\u6027\u9075\u5faa PostgreSQL \u5feb\u7167\u3002WAL \u548c\u5d29\u6e83\u6062\u590d\u884c\u4e3a\u53d6\u51b3\u4e8e\u5173\u7cfb\u7684\u6301\u4e45\u6027\uff1b\u4e34\u65f6\u8868\u3001\u65e0\u65e5\u5fd7\u8868\u4e0e\u6c38\u4e45\u8868\u4e0d\u540c\u3002\u7d22\u5f15\u8bbf\u95ee\u65b9\u6cd5\u4e0e\u8868\u5b58\u50a8\u63a5\u53e3\u5206\u5f00\u3002"]}, {"code": "{\n\t.type = T_TableAmRoutine,\n\n\t.slot_callbacks = heapam_slot_callbacks,\n\n\t.scan_begin = heap_beginscan,\n\t.scan_end = heap_endscan,\n\t.scan_rescan = heap_rescan,\n\t.scan_getnextslot = heap_getnextslot,\n\n\t.scan_set_tidrange = heap_set_tidrange,\n\t.scan_getnextslot_tidrange = heap_getnextslot_tidrange,\n\n\t.parallelscan_estimate = table_block_parallelscan_estimate,\n\t.parallelscan_initialize = table_block_parallelscan_initialize,\n\t.parallelscan_reinitialize = table_block_parallelscan_reinitialize,\n\n\t.index_fetch_begin = heapam_index_fetch_begin,\n\t.index_fetch_reset = heapam_index_fetch_reset,\n\t.index_fetch_end = heapam_index_fetch_end,\n\t.index_fetch_tuple = heapam_index_fetch_tuple,\n\n\t.tuple_insert = heapam_tuple_insert,\n\t.tuple_insert_speculative = heapam_tuple_insert_speculative,\n\t.tuple_complete_speculative = heapam_tuple_complete_speculative,\n\t.multi_insert = heap_multi_insert,\n\t.tuple_delete = heapam_tuple_delete,\n\t.tuple_update = heapam_tuple_update,\n\t.tuple_lock = heapam_tuple_lock,\n\n\t.tuple_fetch_row_version = heapam_fetch_row_version,\n\t.tuple_get_latest_tid = heap_get_latest_tid,\n\t.tuple_tid_valid = heapam_tuple_tid_valid,\n\t.tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot,\n\t.index_delete_tuples = heap_index_delete_tuples,\n\n\t.relation_set_new_filelocator = heapam_relation_set_new_filelocator,\n\t.relation_nontransactional_truncate = heapam_relation_nontransactional_truncate,\n\t.relation_copy_data = heapam_relation_copy_data,\n\t.relation_copy_for_cluster = heapam_relation_copy_for_cluster,\n\t.relation_vacuum = heap_vacuum_rel,\n\t.scan_analyze_next_block = heapam_scan_analyze_next_block,\n\t.scan_analyze_next_tuple = heapam_scan_analyze_next_tuple,\n\t.index_build_range_scan = heapam_index_build_range_scan,\n\t.index_validate_scan = heapam_index_validate_scan,\n\n\t.relation_size = table_block_relation_size,\n\t.relation_needs_toast_table = heapam_relation_needs_toast_table,\n\t.relation_toast_am = heapam_relation_toast_am,\n\t.relation_fetch_toast_slice = heap_fetch_toast_slice,\n\n\t.relation_estimate_size = heapam_estimate_rel_size,\n\n\t.scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple,\n\t.scan_sample_next_block = heapam_scan_sample_next_block,\n\t.scan_sample_next_tuple = heapam_scan_sample_next_tuple\n}", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u6ce8\u518c\u7684\u5b9e\u73b0"}], "localization": {"status": "complete", "sources": [{"url": "/docs/18/tableam.html", "method": "same-major semantic node", "sha256": "29a69a32b5b468f79af513ef4e398bccc182443109d9f3da23f374e018b981e6", "language": "zh", "matched_nodes": ["#TABLEAM/p[11]", "#TABLEAM/p[13]", "#TABLEAM/p[15]", "#TABLEAM/p[16]", "#TABLEAM/p[3]", "#TABLEAM/p[4]", "#TABLEAM/p[5]", "#TABLEAM/p[6]", "#TABLEAM/p[8]", "#TABLEAM/p[9]"]}], "language": "zh", "original_text": {"/versions/18/description/0": "The built-in heap table access method integrates tuple storage, visibility, scans, index fetches and maintenance with PostgreSQL.", "/versions/18/facts/0/label": "Interface family", "/versions/18/facts/0/value": "Table access method", "/versions/18/facts/1/label": "Handler or routine", "/versions/18/facts/2/label": "Recorded callbacks", "/versions/18/tables/0/title": "Registered interface handlers", "/versions/18/related/0/label": "System catalog pg_am", "/versions/18/related/2/label": "Index AM", "/versions/18/sections/0/title": "Interface and capability boundaries", "/versions/18/sections/1/title": "Heap storage, visibility and WAL", "/versions/18/sections/2/title": "Registered implementation in core source", "/versions/18/tables/0/rows/0/state": "Handler registered; conditions apply", "/versions/18/tables/0/rows/1/state": "Handler registered; conditions apply", "/versions/18/tables/0/rows/2/state": "Handler registered; conditions apply", "/versions/18/tables/0/rows/3/state": "Handler registered; conditions apply", "/versions/18/tables/0/rows/4/state": "Handler registered; conditions apply", "/versions/18/tables/0/rows/5/state": "Handler registered; conditions apply", "/versions/18/tables/0/rows/6/state": "Handler registered; conditions apply", "/versions/18/tables/0/rows/7/state": "Handler registered; conditions apply", "/versions/18/tables/0/rows/8/state": "Handler registered; conditions apply", "/versions/18/tables/0/rows/9/state": "Handler registered; conditions apply", "/versions/18/tables/0/rows/10/state": "Handler registered; conditions apply", "/versions/18/sections/0/paragraphs/0": "The matrix records callbacks actually registered in this source build. Registration identifies an implemented interface hook; options, query shape, privileges and provider rules determine whether an operation is allowed.", "/versions/18/sections/0/paragraphs/1": "The complete same-version manual below retains configuration, constraints and examples. No runtime capability test is claimed.", "/versions/18/sections/1/paragraphs/0": "This inventory starts with the Table AM interface in PostgreSQL 12. Earlier PostgreSQL heap storage is not relabeled as a Table AM implementation.", "/versions/18/sections/1/paragraphs/1": "Heap visibility follows PostgreSQL snapshots. WAL and crash-recovery behavior depend on relation persistence; temporary and unlogged tables differ from permanent tables. Index access methods remain separate from the table storage interface.", "/versions/18/tables/0/rows/0/feature": "Tuple slot", "/versions/18/tables/0/rows/1/feature": "Begin scan", "/versions/18/tables/0/rows/2/feature": "Parallel scan initialization", "/versions/18/tables/0/rows/3/feature": "Begin index lookup", "/versions/18/tables/0/rows/4/feature": "Fetch identified tuple", "/versions/18/tables/0/rows/5/feature": "Insert tuple", "/versions/18/tables/0/rows/6/feature": "Update tuple", "/versions/18/tables/0/rows/7/feature": "Delete tuple", "/versions/18/tables/0/rows/8/feature": "Vacuum relation", "/versions/18/tables/0/rows/9/feature": "Analyze block", "/versions/18/tables/0/columns/0/label": "Interface operation", "/versions/18/tables/0/columns/1/label": "Source observation", "/versions/18/tables/0/columns/2/label": "Callback", "/versions/18/tables/0/columns/3/label": "Implementation", "/versions/18/tables/0/rows/10/feature": "TOAST decision"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "6c7bd2e2f6691cce57c835d991feefc5864df47eda2ec7884768f0c2efa48406", "canonical_center_text_hash": "4c199aa6b38c042658e4f31e3a506a7ee77113bae37c87aa35d1a18adb9fb6d6"}, "evidence_kind": "source and documentation", "description_zh": "\u672c\u7ae0\u8bf4\u660e PostgreSQL \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684 \u8868\u8bbf\u95ee\u65b9\u6cd5 \u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002 \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 pg_am \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002 pg_am \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a \u5904\u7406\u5668\u51fd\u6570 \u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 CREATE ACCESS METHOD \u548c DROP ACCESS METHOD SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002 \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a internal \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b table_am_handler \u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002 \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a", "comparison_data": {"options": [], "callbacks": {"scan_end": "heap_endscan", "scan_begin": "heap_beginscan", "tuple_lock": "heapam_tuple_lock", "scan_rescan": "heap_rescan", "multi_insert": "heap_multi_insert", "tuple_delete": "heapam_tuple_delete", "tuple_insert": "heapam_tuple_insert", "tuple_update": "heapam_tuple_update", "relation_size": "table_block_relation_size", "slot_callbacks": "heapam_slot_callbacks", "index_fetch_end": "heapam_index_fetch_end", "relation_vacuum": "heap_vacuum_rel", "tuple_tid_valid": "heapam_tuple_tid_valid", "scan_getnextslot": "heap_getnextslot", "index_fetch_begin": "heapam_index_fetch_begin", "index_fetch_reset": "heapam_index_fetch_reset", "index_fetch_tuple": "heapam_index_fetch_tuple", "relation_toast_am": "heapam_relation_toast_am", "scan_set_tidrange": "heap_set_tidrange", "relation_copy_data": "heapam_relation_copy_data", "index_delete_tuples": "heap_index_delete_tuples", "index_validate_scan": "heapam_index_validate_scan", "tuple_get_latest_tid": "heap_get_latest_tid", "parallelscan_estimate": "table_block_parallelscan_estimate", "index_build_range_scan": "heapam_index_build_range_scan", "relation_estimate_size": "heapam_estimate_rel_size", "scan_bitmap_next_tuple": "heapam_scan_bitmap_next_tuple", "scan_sample_next_block": "heapam_scan_sample_next_block", "scan_sample_next_tuple": "heapam_scan_sample_next_tuple", "parallelscan_initialize": "table_block_parallelscan_initialize", "scan_analyze_next_block": "heapam_scan_analyze_next_block", "scan_analyze_next_tuple": "heapam_scan_analyze_next_tuple", "tuple_fetch_row_version": "heapam_fetch_row_version", "tuple_insert_speculative": "heapam_tuple_insert_speculative", "tuple_satisfies_snapshot": "heapam_tuple_satisfies_snapshot", "parallelscan_reinitialize": "table_block_parallelscan_reinitialize", "relation_copy_for_cluster": "heapam_relation_copy_for_cluster", "scan_getnextslot_tidrange": "heap_getnextslot_tidrange", "relation_fetch_toast_slice": "heap_fetch_toast_slice", "relation_needs_toast_table": "heapam_relation_needs_toast_table", "tuple_complete_speculative": "heapam_tuple_complete_speculative", "relation_set_new_filelocator": "heapam_relation_set_new_filelocator", "relation_nontransactional_truncate": "heapam_relation_nontransactional_truncate"}, "source_options": [], "protocol_versions": {}}, "comparison_hash": "1238506f6e6c6648382f3362465d376e28e55ca6108f975b44f413d320769112", "manual_language": "zh", "runtime_verified": false, "description_zh_html": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span>PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em>\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a href=\"/zh/docs/18/catalog-pg-am.html\" rel=\"nofollow\"><code>pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code>pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em>\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a href=\"/zh/docs/18/sql-create-access-method.html\" rel=\"nofollow\"><span>CREATE ACCESS METHOD</span></a> \u548c <a href=\"/zh/docs/18/sql-drop-access-method.html\" rel=\"nofollow\"><span>DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code>internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code>table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\n </p><p>\n  \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a\n </p><p><a href=\"/zh/docs/18/tableam.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>", "center_zh_rendered": "<p>\u8868\u8bbf\u95ee\u65b9\u6cd5 heap\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n  \u672c\u7ae0\u8bf4\u660e <span>PostgreSQL</span> \u6838\u5fc3\u7cfb\u7edf\u4e0e\u7ba1\u7406\u8868\u5b58\u50a8\u7684<em>\u8868\u8bbf\u95ee\u65b9\u6cd5</em>\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u9664\u8fd9\u91cc\u89c4\u5b9a\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6838\u5fc3\u7cfb\u7edf\u5bf9\u8fd9\u4e9b\u8bbf\u95ee\u65b9\u6cd5\u77e5\u4e4b\u751a\u5c11\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u9644\u52a0\u4ee3\u7801\u6765\u5f00\u53d1\u5168\u65b0\u7684\u8bbf\u95ee\u65b9\u6cd5\u7c7b\u578b\u3002\n </p><p>\n  \u6bcf\u4e2a\u8868\u8bbf\u95ee\u65b9\u6cd5\u90fd\u7531\u7cfb\u7edf\u76ee\u5f55 <a href=\"/docs/18/catalog-pg-am.html\"><code>pg_am</code></a> \u4e2d\u7684\u4e00\u884c\u63cf\u8ff0\u3002<code>pg_am</code> \u6761\u76ee\u6307\u5b9a\u4e86\u8be5\u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u540d\u79f0\u4ee5\u53ca\u4e00\u4e2a<em>\u5904\u7406\u5668\u51fd\u6570</em>\u3002\u8fd9\u4e9b\u6761\u76ee\u53ef\u4ee5\u901a\u8fc7 <a href=\"/docs/18/sql-create-access-method.html\"><span>CREATE ACCESS METHOD</span></a> \u548c <a href=\"/docs/18/sql-drop-access-method.html\"><span>DROP ACCESS METHOD</span></a> SQL \u547d\u4ee4\u521b\u5efa\u548c\u5220\u9664\u3002\n </p><p>\n  \u8868\u8bbf\u95ee\u65b9\u6cd5\u7684\u5904\u7406\u5668\u51fd\u6570\u5fc5\u987b\u58f0\u660e\u4e3a\u63a5\u53d7\u4e00\u4e2a <code>internal</code> \u7c7b\u578b\u7684\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u4f2a\u7c7b\u578b\n  <code>table_am_handler</code>\u3002\u8fd9\u4e2a\u53c2\u6570\u53ea\u662f\u4e00\u4e2a\u5360\u4f4d\u503c\uff0c\u7528\u6765\u9632\u6b62\u5904\u7406\u5668\u51fd\u6570\u88ab SQL \u547d\u4ee4\u76f4\u63a5\u8c03\u7528\u3002\n </p><p>\n  \u4e0b\u9762\u5c55\u793a\u6269\u5c55 SQL \u811a\u672c\u6587\u4ef6\u5982\u4f55\u521b\u5efa\u8868\u8bbf\u95ee\u65b9\u6cd5\u5904\u7406\u5668\uff1a\n </p><p><a href=\"/docs/18/tableam.html\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p>"}, "comparison": {"left": "17", "right": "18", "status": "changed", "diff": "--- PostgreSQL 17\n+++ PostgreSQL 18\n@@ -24,7 +24,6 @@\n     \"scan_analyze_next_block\": \"heapam_scan_analyze_next_block\",\n     \"scan_analyze_next_tuple\": \"heapam_scan_analyze_next_tuple\",\n     \"scan_begin\": \"heap_beginscan\",\n-    \"scan_bitmap_next_block\": \"heapam_scan_bitmap_next_block\",\n     \"scan_bitmap_next_tuple\": \"heapam_scan_bitmap_next_tuple\",\n     \"scan_end\": \"heap_endscan\",\n     \"scan_getnextslot\": \"heap_getnextslot\","}}