aboutsummaryrefslogtreecommitdiff
path: root/doc/src/sgml/ref/create_index.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/sgml/ref/create_index.sgml')
-rw-r--r--doc/src/sgml/ref/create_index.sgml330
1 files changed, 330 insertions, 0 deletions
diff --git a/doc/src/sgml/ref/create_index.sgml b/doc/src/sgml/ref/create_index.sgml
new file mode 100644
index 00000000000..36ecd53267e
--- /dev/null
+++ b/doc/src/sgml/ref/create_index.sgml
@@ -0,0 +1,330 @@
+<REFENTRY ID="SQL-CREATEINDEX-1">
+ <REFMETA>
+ <REFENTRYTITLE>
+ CREATE INDEX
+ </REFENTRYTITLE>
+ <REFMISCINFO>SQL - Language Statements</REFMISCINFO>
+ </REFMETA>
+ <REFNAMEDIV>
+ <REFNAME>
+ CREATE INDEX
+ </REFNAME>
+ <REFPURPOSE>
+ Constructs a secondary index
+ </REFPURPOSE>
+ <REFSYNOPSISDIV>
+ <REFSYNOPSISDIVINFO>
+ <DATE>1998-04-15</DATE>
+ </REFSYNOPSISDIVINFO>
+ <SYNOPSIS>
+ CREATE [UNIQUE] INDEX <replaceable class="parameter">index_name</replaceable>
+ ON <replaceable class="parameter">table</replaceable> [USING <replaceable class="parameter">acc_name</replaceable> ]
+ ( <replaceable class="parameter">column</replaceable> [<replaceable class="parameter">ops_name</replaceable>] [, ...] )
+
+ CREATE [UNIQUE] INDEX <replaceable class="parameter">index_name</replaceable>
+ ON <replaceable class="parameter">table</replaceable> [USING <replaceable class="parameter">acc_name</replaceable> ]
+ ( <replaceable class="parameter">func_name</replaceable>( <replaceable class="parameter">column</replaceable> [, ... ]) <replaceable class="parameter">ops_name</replaceable> )
+ </SYNOPSIS>
+
+ <REFSECT2 ID="R2-SQL-CREATEINDEX-1">
+ <REFSECT2INFO>
+ <DATE>1998-04-15</DATE>
+ </REFSECT2INFO>
+ <TITLE>
+ Inputs
+ </TITLE>
+ <PARA>
+ </PARA>
+ <VARIABLELIST>
+ <VARLISTENTRY>
+ <TERM>
+ </TERM>
+ <LISTITEM>
+ <PARA>
+ <VARIABLELIST>
+ <VARLISTENTRY>
+ <TERM>
+ <function>UNIQUE</function>
+ </TERM>
+ <LISTITEM>
+ <PARA>
+ <function>UNIQUE</function> causes the system to check for
+ duplicate values when the index is created (if data
+ already exist) and each time data is added. Attempts to
+ insert or update non-duplicate data will generate an
+ error.
+ </PARA>
+ </LISTITEM>
+ </VARLISTENTRY>
+ <VARLISTENTRY>
+ <TERM>
+ <replaceable class="parameter">index_name</replaceable>
+ </TERM>
+ <LISTITEM>
+ <PARA>
+ The name of the index to be created.
+ </PARA>
+ </LISTITEM>
+ </VARLISTENTRY>
+ <VARLISTENTRY>
+ <TERM>
+ <replaceable class="parameter">table</replaceable>
+ </TERM>
+ <LISTITEM>
+ <PARA>
+ The name of the table to be indexed.
+ </PARA>
+ </LISTITEM>
+ </VARLISTENTRY>
+ <VARLISTENTRY>
+ <TERM>
+ <replaceable class="parameter">acc_name</replaceable>
+ </TERM>
+ <LISTITEM>
+ <PARA>
+ the name of the access method which is to be used for
+ the index. The default access method is BTREE.
+ Postgres provides three access methods for secondary indices:
+ <variablelist>
+ <varlistentry>
+ <term>BTREE</term>
+ <listitem>
+ <para>
+ an implementation of the Lehman-Yao
+ high-concurrency btrees.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>RTREE</term>
+ <listitem>
+ <para>implements standard rtrees using Guttman's
+ quadratic split algorithm.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>HASH</term>
+ <listitem>
+ <para>
+ an implementation of Litwin's linear hashing.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </PARA>
+ </LISTITEM>
+ </VARLISTENTRY>
+ <VARLISTENTRY>
+ <TERM>
+ <replaceable class="parameter">column</replaceable>
+ </TERM>
+ <LISTITEM>
+ <PARA>
+ The name of a column of the table.
+ </PARA>
+ </LISTITEM>
+ </VARLISTENTRY>
+ <VARLISTENTRY>
+ <TERM>
+ <replaceable class="parameter">ops_name</replaceable>
+ </TERM>
+ <LISTITEM>
+ <PARA>
+ An associated operator class.
+ The following select list returns all ops_names:
+
+ <programlisting>
+ SELECT am.amname AS acc_name,
+ opc.opcname AS ops_name,
+ opr.oprname AS ops_comp
+ FROM pg_am am, pg_amop amop,
+ pg_opclass opc, pg_operator opr
+ WHERE amop.amopid = am.oid AND
+ amop.amopclaid = opc.oid AND
+ amop.amopopr = opr.oid
+ ORDER BY acc_name, ops_name, ops_comp
+ </programlisting>
+ </PARA>
+ </LISTITEM>
+ </VARLISTENTRY>
+ <VARLISTENTRY>
+ <TERM>
+ <replaceable class="parameter">func_name</replaceable>
+ </TERM>
+ <LISTITEM>
+ <PARA>
+ A user-defined function, which returns a value that can
+ be indexed.
+ </PARA>
+ </LISTITEM>
+ </VARLISTENTRY>
+ </variablelist>
+ </LISTITEM>
+ </VARLISTENTRY>
+ </VARIABLELIST>
+ </REFSECT2>
+
+ <REFSECT2 ID="R2-SQL-CREATEINDEX-2">
+ <REFSECT2INFO>
+ <DATE>1998-04-15</DATE>
+ </REFSECT2INFO>
+ <TITLE>
+ Outputs
+ </TITLE>
+ <PARA>
+ </PARA>
+ <VARIABLELIST>
+ <VARLISTENTRY>
+ <TERM>
+ </TERM>
+ <LISTITEM>
+ <PARA>
+ <VARIABLELIST>
+ <VARLISTENTRY>
+ <TERM>
+ <ReturnValue>CREATE</ReturnValue>
+ </TERM>
+ <LISTITEM>
+ <PARA>
+ The message returned if the index is successfully created.
+ </PARA>
+ </LISTITEM>
+ </VARLISTENTRY>
+ <VARLISTENTRY>
+ <TERM>
+ <ReturnValue>ERROR: Cannot create index: 'index_name' already exists.</ReturnValue>
+ </TERM>
+ <LISTITEM>
+ <PARA>
+ This error occurs if it is impossible to create the index.
+ </PARA>
+ </LISTITEM>
+ </VARLISTENTRY>
+ </variablelist>
+ </LISTITEM>
+ </VARLISTENTRY>
+ </VARIABLELIST>
+ </REFSECT2>
+ </REFSYNOPSISDIV>
+
+ <REFSECT1 ID="R1-SQL-CREATEINDEX-1">
+ <REFSECT1INFO>
+ <DATE>1998-04-15</DATE>
+ </REFSECT1INFO>
+ <TITLE>
+ Description
+ </TITLE>
+ <PARA>
+ This command constructs an index called <replaceable class="parameter">index_name</replaceable>.
+ </PARA>
+ <para>
+ In the first syntax shown above, the key fields for the
+ index are specified as column names; a column may also have
+ an associated operator class. An operator class is used
+ to specify the operators to be used for a particular
+ index. For example, a btree index on four-byte integers
+ would use the <literal>int4_ops</literal> class;
+ this operator class includes
+ comparison functions for four-byte integers. The default
+ operator class is the appropriate operator class for that
+ field type.
+ </para>
+ <para>
+ In the second syntax, an index is defined
+ on the result of a user-defined function
+ <replaceable class="parameter">func_name</replaceable> applied
+ to one or more attributes of a single class. These functional
+ indices can be used to obtain fast access to data
+ based on operators that would normally require some
+ transformation to apply them to the base data.
+ </para>
+
+ <REFSECT2 ID="R2-SQL-CREATEINDEX-3">
+ <REFSECT2INFO>
+ <DATE>1998-04-15</DATE>
+ </REFSECT2INFO>
+ <TITLE>
+ Notes
+ </TITLE>
+ <PARA>
+ Currently, only the BTREE access method supports multi-column
+ indices. Up to 7 keys may be specified.
+ </PARA>
+ <para>
+ Use the <citerefentry>
+ <refentrytitle>DROP INDEX</refentrytitle>
+ </citerefentry>
+ statement to remove indexes.
+ </para>
+ </REFSECT2>
+
+ <REFSECT1 ID="R1-SQL-CREATEINDEX-2">
+ <TITLE>
+ Usage
+ </TITLE>
+ <PARA>To create a btree index on the field <literal>title</literal>
+ in the table <literal>films</literal>:
+ </PARA>
+ <ProgramListing>
+ CREATE UNIQUE INDEX title_idx
+ ON films (title);
+ </ProgramListing>
+ <para>
+ To create a rtree index on a point attribute so that we
+ can efficiently use box operators on the result of the
+ conversion function:
+ </para>
+ <programlisting>
+ CREATE INDEX pointloc
+ ON points USING RTREE (point2box(location) box_ops);
+
+ SELECT * FROM points
+ WHERE point2box(points.pointloc) = boxes.box;
+<comment>
+Is this example correct?
+</comment>
+ </programlisting>
+ </REFSECT1>
+
+ <REFSECT1 ID="R1-SQL-CREATEINDEX-3">
+ <TITLE>
+ Compatibility
+ </TITLE>
+ <PARA>
+ </PARA>
+
+ <REFSECT2 ID="R2-SQL-CREATEINDEX-4">
+ <REFSECT2INFO>
+ <DATE>1998-04-15</DATE>
+ </REFSECT2INFO>
+ <TITLE>
+ SQL92
+ </TITLE>
+ <PARA>
+ CREATE INDEX is a PostgreSQL language extension.
+ </PARA>
+ <para>
+ There is no CREATE INDEX command in SQL92.
+ </para>
+ </refsect2>
+ </refsect1>
+</REFENTRY>
+
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:"../reference.ced"
+sgml-exposed-tags:nil
+sgml-local-catalogs:"/usr/lib/sgml/catalog"
+sgml-local-ecat-files:nil
+End:
+-->