{"Entry":{"collection":"sql","key":"create-access-method","name":"CREATE ACCESS METHOD","aliases":["create-access-method"],"metadata":{"aliases":["create-access-method"],"changed_in":[],"changes":[{"from":"9.5","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":[],"removed":[]},"status":"added","synopsis":null,"to":"9.6"},{"from":"9.6","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["parameters"],"removed":[]},"status":"changed","synopsis":null,"to":"10"},{"from":"10","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["parameters"],"removed":[]},"status":"changed","synopsis":null,"to":"11"},{"from":"11","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["parameters"],"removed":[]},"status":"changed","synopsis":null,"to":"12"},{"from":"13","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["parameters"],"removed":[]},"status":"changed","synopsis":null,"to":"14"},{"from":"14","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["parameters"],"removed":[]},"status":"changed","synopsis":null,"to":"15"},{"from":"16","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["parameters"],"removed":[]},"status":"changed","synopsis":null,"to":"17"},{"from":"17","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["parameters"],"removed":[]},"status":"changed","synopsis":null,"to":"18"}],"content_hash":"ad6b109b952e06f3b91ceb7f214f4d8aff81efa74ff9179731d98ca99d9d0ebf","editorial":{},"first_version":"9.6","group":"extension","imported_at":"2026-09-30T17:43:38.495468+08:00","last_version":"20","name":"CREATE ACCESS METHOD","object":"ACCESS METHOD","position":7001,"present_in":["9.6","10","11","12","13","14","15","16","17","18","19","20"],"purpose":"define a new access method","purpose_zh":"","related":["drop-access-method","create-operator-class","create-operator-family"],"slug":"create-access-method","source_rev":"a709ab85","synopsis":"CREATE ACCESS METHOD name\nTYPE access_method_type\nHANDLER handler_function","verb":"CREATE"}},"Definition":{"Collection":"sql","Key":"create-access-method","SourceDatabase":"center","Version":"18","SourceTable":"sqlcmd","SourceKey":"create-access-method","SourceRevision":"a709ab85","Facts":{"anchor":"SQL-CREATE-ACCESS-METHOD","file":"sql-create-access-method.html","lang":"en","name":"CREATE ACCESS METHOD","purpose":"define a new access method","purpose_zh":"","related":["drop-access-method","create-operator-class","create-operator-family"],"sections":[{"html":"\u003cp\u003e\u003ccode class=\"command\"\u003eCREATE ACCESS METHOD\u003c/code\u003e creates a new access method.\u003c/p\u003e\u003cp\u003eThe access method name must be unique within the database.\u003c/p\u003e\u003cp\u003eOnly superusers can define new access methods.\u003c/p\u003e","key":"description","title":"Description"},{"html":"\u003cdiv class=\"variablelist\"\u003e\u003cdl class=\"variablelist\"\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe name of the access method to be created.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eaccess_method_type\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThis clause specifies the type of access method to define. Only \u003ccode class=\"literal\"\u003eTABLE\u003c/code\u003e and \u003ccode class=\"literal\"\u003eINDEX\u003c/code\u003e are supported at present.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003ehandler_function\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003ehandler_function\u003c/code\u003e\u003c/em\u003e is the name (possibly schema-qualified) of a previously registered function that represents the access method. The handler function must be declared to take a single argument of type \u003ccode class=\"type\"\u003einternal\u003c/code\u003e, and its return type depends on the type of access method; for \u003ccode class=\"literal\"\u003eTABLE\u003c/code\u003e access methods, it must be \u003ccode class=\"type\"\u003etable_am_handler\u003c/code\u003e and for \u003ccode class=\"literal\"\u003eINDEX\u003c/code\u003e access methods, it must be \u003ccode class=\"type\"\u003eindex_am_handler\u003c/code\u003e. The C-level API that the handler function must implement varies depending on the type of access method. The table access method API is described in \u003ca href=\"/docs/18/tableam.html\" title=\"Chapter 62. Table Access Method Interface Definition\"\u003eChapter 62\u003c/a\u003e and the index access method API is described in \u003ca href=\"/docs/18/indexam.html\" title=\"Chapter 63. Index Access Method Interface Definition\"\u003eChapter 63\u003c/a\u003e.\u003c/p\u003e\u003c/dd\u003e\u003c/dl\u003e\u003c/div\u003e","key":"parameters","title":"Parameters"},{"html":"\u003cp\u003eCreate an index access method \u003ccode class=\"literal\"\u003eheptree\u003c/code\u003e with handler function \u003ccode class=\"literal\"\u003eheptree_handler\u003c/code\u003e:\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eCREATE ACCESS METHOD heptree TYPE INDEX HANDLER heptree_handler;\n\u003c/pre\u003e","key":"examples","title":"Examples"},{"html":"\u003cp\u003e\u003ccode class=\"command\"\u003eCREATE ACCESS METHOD\u003c/code\u003e is a \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e extension.\u003c/p\u003e","key":"compatibility","title":"Compatibility"},{"html":"\u003cspan class=\"simplelist\"\u003e\u003ca href=\"/wiki/sql/drop-access-method/?v=18\" title=\"DROP ACCESS METHOD\"\u003e\u003cspan class=\"refentrytitle\"\u003eDROP ACCESS METHOD\u003c/span\u003e\u003c/a\u003e, \u003ca href=\"/wiki/sql/create-operator-class/?v=18\" title=\"CREATE OPERATOR CLASS\"\u003e\u003cspan class=\"refentrytitle\"\u003eCREATE OPERATOR CLASS\u003c/span\u003e\u003c/a\u003e, \u003ca href=\"/wiki/sql/create-operator-family/?v=18\" title=\"CREATE OPERATOR FAMILY\"\u003e\u003cspan class=\"refentrytitle\"\u003eCREATE OPERATOR FAMILY\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e","key":"see_also","title":"See Also"}],"sections_same_as":"","slug":"18","synopsis_html":"CREATE ACCESS METHOD \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e\n    TYPE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eaccess_method_type\u003c/code\u003e\u003c/em\u003e\n    HANDLER \u003cem class=\"replaceable\"\u003e\u003ccode\u003ehandler_function\u003c/code\u003e\u003c/em\u003e","synopsis_text":"CREATE ACCESS METHOD name\nTYPE access_method_type\nHANDLER handler_function"},"ManualEvidence":{},"MeasuredEvidence":{}},"Text":{"Collection":"sql","Key":"create-access-method","SourceDatabase":"pgweb","Version":"18","Locale":"zh-Hans","Title":"CREATE ACCESS METHOD","Summary":"定义一种新的访问方法","BodyHTML":"\u003cpre\u003eCREATE ACCESS METHOD name\nTYPE access_method_type\nHANDLER handler_function\u003c/pre\u003e\u003csection\u003e\u003ch2\u003e描述\u003c/h2\u003e\u003cp\u003e\u003ccode\u003eCREATE ACCESS METHOD\u003c/code\u003e创建一种新的访问方法。\u003c/p\u003e\u003cp\u003e访问方法的名称在数据库中必须唯一。\u003c/p\u003e\u003cp\u003e只有超级用户可以定义新的访问方法。\u003c/p\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e参数\u003c/h2\u003e\u003cdiv\u003e\u003cdl\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e要创建的访问方法的名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003eaccess_method_type\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e此子句指定要定义的访问方法类型。目前仅支持\u003ccode\u003eTABLE\u003c/code\u003e 和\u003ccode\u003eINDEX\u003c/code\u003e。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003ehandler_function\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e\u003cem\u003e\u003ccode\u003ehandler_function\u003c/code\u003e\u003c/em\u003e是一个先前已注册的函数名称（可以带模式限定），用于表示该访问方法。处理器函数必须声明为接受一个\u003ccode\u003einternal\u003c/code\u003e类型的参数，并且其返回类型取决于访问方法的类型；对于\u003ccode\u003eTABLE\u003c/code\u003e访问方法，它必须返回 \u003ccode\u003etable_am_handler\u003c/code\u003e，而对于\u003ccode\u003eINDEX\u003c/code\u003e访问方法，它必须返回\u003ccode\u003eindex_am_handler\u003c/code\u003e。处理器函数必须实现的 C 级别 API 也取决于访问方法类型。表访问方法的 API 见\u003ca href=\"/docs/18/tableam.html\" rel=\"nofollow\"\u003e第 62 章\u003c/a\u003e，索引访问方法的 API 见\u003ca href=\"/docs/18/indexam.html\" rel=\"nofollow\"\u003e第 63 章\u003c/a\u003e。\u003c/p\u003e\u003c/dd\u003e\u003c/dl\u003e\u003c/div\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e示例\u003c/h2\u003e\u003cp\u003e创建索引访问方法\u003ccode\u003eheptree\u003c/code\u003e，其处理器函数为\u003ccode\u003eheptree_handler\u003c/code\u003e：\u003c/p\u003e\u003cpre\u003eCREATE ACCESS METHOD heptree TYPE INDEX HANDLER heptree_handler;\n\u003c/pre\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e兼容性\u003c/h2\u003e\u003cp\u003e\u003ccode\u003eCREATE ACCESS METHOD\u003c/code\u003e是一种\u003cspan\u003ePostgreSQL\u003c/span\u003e扩展。\u003c/p\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e另见\u003c/h2\u003e\u003cspan\u003e\u003ca href=\"/wiki/sql/drop-access-method/?v=18\" title=\"DROP ACCESS METHOD\" rel=\"nofollow\"\u003e\u003cspan\u003eDROP ACCESS METHOD\u003c/span\u003e\u003c/a\u003e, \u003ca href=\"/wiki/sql/create-operator-class/?v=18\" title=\"CREATE OPERATOR CLASS\" rel=\"nofollow\"\u003e\u003cspan\u003eCREATE OPERATOR CLASS\u003c/span\u003e\u003c/a\u003e, \u003ca href=\"/wiki/sql/create-operator-family/?v=18\" title=\"CREATE OPERATOR FAMILY\" rel=\"nofollow\"\u003e\u003cspan\u003eCREATE OPERATOR FAMILY\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e\u003c/section\u003e","SourceRevision":"1b5ca64c","ContentHash":"9466762f714cd72b33d325c61bf4a81aa2c9957a68a2c50608916218a79514a6","Payload":{"purpose_zh":"定义一种新的访问方法","sections":[{"html":"\u003cp\u003e\u003ccode class=\"command\"\u003eCREATE ACCESS METHOD\u003c/code\u003e创建一种新的访问方法。\u003c/p\u003e\u003cp\u003e访问方法的名称在数据库中必须唯一。\u003c/p\u003e\u003cp\u003e只有超级用户可以定义新的访问方法。\u003c/p\u003e","key":"description","title":"描述"},{"html":"\u003cdiv class=\"variablelist\"\u003e\u003cdl class=\"variablelist\"\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e要创建的访问方法的名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eaccess_method_type\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e此子句指定要定义的访问方法类型。目前仅支持\u003ccode class=\"literal\"\u003eTABLE\u003c/code\u003e 和\u003ccode class=\"literal\"\u003eINDEX\u003c/code\u003e。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003ehandler_function\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003ehandler_function\u003c/code\u003e\u003c/em\u003e是一个先前已注册的函数名称（可以带模式限定），用于表示该访问方法。处理器函数必须声明为接受一个\u003ccode class=\"type\"\u003einternal\u003c/code\u003e类型的参数，并且其返回类型取决于访问方法的类型；对于\u003ccode class=\"literal\"\u003eTABLE\u003c/code\u003e访问方法，它必须返回 \u003ccode class=\"type\"\u003etable_am_handler\u003c/code\u003e，而对于\u003ccode class=\"literal\"\u003eINDEX\u003c/code\u003e访问方法，它必须返回\u003ccode class=\"type\"\u003eindex_am_handler\u003c/code\u003e。处理器函数必须实现的 C 级别 API 也取决于访问方法类型。表访问方法的 API 见\u003ca href=\"/docs/18/tableam.html\" title=\"第 62 章 表访问方法接口定义\"\u003e第 62 章\u003c/a\u003e，索引访问方法的 API 见\u003ca href=\"/docs/18/indexam.html\" title=\"第 63 章 索引访问方法接口定义\"\u003e第 63 章\u003c/a\u003e。\u003c/p\u003e\u003c/dd\u003e\u003c/dl\u003e\u003c/div\u003e","key":"parameters","title":"参数"},{"html":"\u003cp\u003e创建索引访问方法\u003ccode class=\"literal\"\u003eheptree\u003c/code\u003e，其处理器函数为\u003ccode class=\"literal\"\u003eheptree_handler\u003c/code\u003e：\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eCREATE ACCESS METHOD heptree TYPE INDEX HANDLER heptree_handler;\n\u003c/pre\u003e","key":"examples","title":"示例"},{"html":"\u003cp\u003e\u003ccode class=\"command\"\u003eCREATE ACCESS METHOD\u003c/code\u003e是一种\u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e扩展。\u003c/p\u003e","key":"compatibility","title":"兼容性"},{"html":"\u003cspan class=\"simplelist\"\u003e\u003ca href=\"/wiki/sql/drop-access-method/?v=18\" title=\"DROP ACCESS METHOD\"\u003e\u003cspan class=\"refentrytitle\"\u003eDROP ACCESS METHOD\u003c/span\u003e\u003c/a\u003e, \u003ca href=\"/wiki/sql/create-operator-class/?v=18\" title=\"CREATE OPERATOR CLASS\"\u003e\u003cspan class=\"refentrytitle\"\u003eCREATE OPERATOR CLASS\u003c/span\u003e\u003c/a\u003e, \u003ca href=\"/wiki/sql/create-operator-family/?v=18\" title=\"CREATE OPERATOR FAMILY\"\u003e\u003cspan class=\"refentrytitle\"\u003eCREATE OPERATOR FAMILY\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e","key":"see_also","title":"另见"}],"sections_same_as":"","synopsis_html":"CREATE ACCESS METHOD \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e\n    TYPE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eaccess_method_type\u003c/code\u003e\u003c/em\u003e\n    HANDLER \u003cem class=\"replaceable\"\u003e\u003ccode\u003ehandler_function\u003c/code\u003e\u003c/em\u003e","synopsis_text":"CREATE ACCESS METHOD name\nTYPE access_method_type\nHANDLER handler_function"}},"RequestedLocale":"zh-Hans","Fallback":false,"Versions":["10","11","12","13","14","15","16","17","18","19","20","9.6"],"Locales":["en","zh-Hans"],"Signatures":null,"Spellings":null,"SQLState":null,"Evidence":null}
