mirror of
https://github.com/postgres/postgres.git
synced 2025-06-11 20:28:21 +03:00
Support CREATE ACCESS METHOD
This enables external code to create access methods. This is useful so that extensions can add their own access methods which can be formally tracked for dependencies, so that DROP operates correctly. Also, having explicit support makes pg_dump work correctly. Currently only index AMs are supported, but we expect different types to be added in the future. Authors: Alexander Korotkov, Petr Jelínek Reviewed-By: Teodor Sigaev, Petr Jelínek, Jim Nasby Commitfest-URL: https://commitfest.postgresql.org/9/353/ Discussion: https://www.postgresql.org/message-id/CAPpHfdsXwZmojm6Dx+TJnpYk27kT4o7Ri6X_4OSWcByu1Rm+VA@mail.gmail.com
This commit is contained in:
@ -57,6 +57,12 @@
|
||||
to insert an appropriate row for themselves.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Index access access methods can be defined and dropped using
|
||||
<xref linkend="sql-create-access-method"> and
|
||||
<xref linkend="sql-drop-access-method"> SQL commands respectively.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
An index access method handler function must be declared to accept a
|
||||
single argument of type <type>internal</> and to return the
|
||||
|
@ -52,6 +52,7 @@ Complete list of usable sgml source files in this directory.
|
||||
<!ENTITY commit SYSTEM "commit.sgml">
|
||||
<!ENTITY commitPrepared SYSTEM "commit_prepared.sgml">
|
||||
<!ENTITY copyTable SYSTEM "copy.sgml">
|
||||
<!ENTITY createAccessMethod SYSTEM "create_access_method.sgml">
|
||||
<!ENTITY createAggregate SYSTEM "create_aggregate.sgml">
|
||||
<!ENTITY createCast SYSTEM "create_cast.sgml">
|
||||
<!ENTITY createCollation SYSTEM "create_collation.sgml">
|
||||
@ -94,6 +95,7 @@ Complete list of usable sgml source files in this directory.
|
||||
<!ENTITY delete SYSTEM "delete.sgml">
|
||||
<!ENTITY discard SYSTEM "discard.sgml">
|
||||
<!ENTITY do SYSTEM "do.sgml">
|
||||
<!ENTITY dropAccessMethod SYSTEM "drop_access_method.sgml">
|
||||
<!ENTITY dropAggregate SYSTEM "drop_aggregate.sgml">
|
||||
<!ENTITY dropCast SYSTEM "drop_cast.sgml">
|
||||
<!ENTITY dropCollation SYSTEM "drop_collation.sgml">
|
||||
|
120
doc/src/sgml/ref/create_access_method.sgml
Normal file
120
doc/src/sgml/ref/create_access_method.sgml
Normal file
@ -0,0 +1,120 @@
|
||||
<!--
|
||||
doc/src/sgml/ref/create_access_method.sgml
|
||||
PostgreSQL documentation
|
||||
-->
|
||||
|
||||
<refentry id="sql-create-access-method">
|
||||
<indexterm zone="sql-create-access-method">
|
||||
<primary>CREATE ACCESS METHOD</primary>
|
||||
</indexterm>
|
||||
|
||||
<refmeta>
|
||||
<refentrytitle>CREATE ACCESS METHOD</refentrytitle>
|
||||
<manvolnum>7</manvolnum>
|
||||
<refmiscinfo>SQL - Language Statements</refmiscinfo>
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>CREATE ACCESS METHOD</refname>
|
||||
<refpurpose>define a new access method</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<synopsis>
|
||||
CREATE ACCESS METHOD <replaceable class="parameter">name</replaceable>
|
||||
TYPE <replaceable class="parameter">access_method_type</replaceable>
|
||||
HANDLER <replaceable class="parameter">handler_function</replaceable>
|
||||
</synopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>
|
||||
<command>CREATE ACCESS METHOD</command> creates a new access method.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The access method name must be unique within the database.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Only superusers can define new access methods.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Parameters</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><replaceable class="parameter">name</replaceable></term>
|
||||
<listitem>
|
||||
<para>
|
||||
The name of the access method to be created.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><literal>access_method_type</literal></term>
|
||||
<listitem>
|
||||
<para>
|
||||
This clause specifies type of access method to define.
|
||||
Only <literal>INDEX</literal> is supported at present.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><literal>HANDLER <replaceable class="parameter">handler_function</replaceable></literal></term>
|
||||
<listitem>
|
||||
<para><replaceable class="parameter">handler_function</replaceable> is the
|
||||
name of a previously registered function that will be called to
|
||||
retrieve the struct which contains required parameters and functions
|
||||
of access method to the core. The handler function must take single
|
||||
argument of type <type>internal</>, and its return type depends on the
|
||||
type of access method; for <literal>INDEX</literal> access methods, it
|
||||
must be <type>index_am_handler</type>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
See <xref linkend="index-api"> for index access methods API.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Examples</title>
|
||||
|
||||
<para>
|
||||
Create an access method <literal>heptree</> with
|
||||
handler function <literal>heptree_handler</>:
|
||||
<programlisting>
|
||||
CREATE ACCESS METHOD heptree TYPE INDEX HANDLER heptree_handler;
|
||||
</programlisting>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Compatibility</title>
|
||||
|
||||
<para>
|
||||
<command>CREATE ACCESS METHOD</command> is a
|
||||
<productname>PostgreSQL</> extension.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>See Also</title>
|
||||
|
||||
<simplelist type="inline">
|
||||
<member><xref linkend="sql-drop-access-method"></member>
|
||||
<member><xref linkend="sql-createopclass"></member>
|
||||
<member><xref linkend="sql-createopfamily"></member>
|
||||
</simplelist>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
112
doc/src/sgml/ref/drop_access_method.sgml
Normal file
112
doc/src/sgml/ref/drop_access_method.sgml
Normal file
@ -0,0 +1,112 @@
|
||||
<!--
|
||||
doc/src/sgml/ref/drop_access_method.sgml
|
||||
PostgreSQL documentation
|
||||
-->
|
||||
|
||||
<refentry id="sql-drop-access-method">
|
||||
<indexterm zone="sql-drop-access-method">
|
||||
<primary>DROP ACCESS METHOD</primary>
|
||||
</indexterm>
|
||||
|
||||
<refmeta>
|
||||
<refentrytitle>DROP ACCESS METHOD</refentrytitle>
|
||||
<manvolnum>7</manvolnum>
|
||||
<refmiscinfo>SQL - Language Statements</refmiscinfo>
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>DROP ACCESS METHOD</refname>
|
||||
<refpurpose>remove an access method</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<synopsis>
|
||||
DROP ACCESS METHOD [ IF EXISTS ] <replaceable class="parameter">name</replaceable> [ CASCADE | RESTRICT ]
|
||||
</synopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>
|
||||
<command>DROP ACCESS METHOD</command> removes an existing access method.
|
||||
Only superusers can drop access methods.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Parameters</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><literal>IF EXISTS</literal></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Do not throw an error if the access method does not exist.
|
||||
A notice is issued in this case.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><replaceable class="parameter">name</replaceable></term>
|
||||
<listitem>
|
||||
<para>
|
||||
The name of an existing access method.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><literal>CASCADE</literal></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Automatically drop objects that depend on the access method
|
||||
(such as operator classes, operator families, indexes).
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><literal>RESTRICT</literal></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Refuse to drop the access method if any objects depend on it.
|
||||
This is the default.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Examples</title>
|
||||
|
||||
<para>
|
||||
Drop the access method <literal>heptree</>:
|
||||
<programlisting>
|
||||
DROP ACCESS METHOD heptree;
|
||||
</programlisting></para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Compatibility</title>
|
||||
|
||||
<para>
|
||||
<command>DROP ACCESS METHOD</command> is a
|
||||
<productname>PostgreSQL</> extension.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>See Also</title>
|
||||
|
||||
<simplelist type="inline">
|
||||
<member><xref linkend="sql-create-access-method"></member>
|
||||
</simplelist>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
@ -80,6 +80,7 @@
|
||||
&commit;
|
||||
&commitPrepared;
|
||||
©Table;
|
||||
&createAccessMethod;
|
||||
&createAggregate;
|
||||
&createCast;
|
||||
&createCollation;
|
||||
@ -122,6 +123,7 @@
|
||||
&delete;
|
||||
&discard;
|
||||
&do;
|
||||
&dropAccessMethod;
|
||||
&dropAggregate;
|
||||
&dropCast;
|
||||
&dropCollation;
|
||||
|
Reference in New Issue
Block a user