mirror of
https://github.com/postgres/postgres.git
synced 2025-04-25 21:42:33 +03:00
Add mention of function CREATE INDEX usage.
This commit is contained in:
parent
0c9790e616
commit
50b5d4bf76
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_index.sgml,v 1.27 2002/03/22 19:20:38 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_index.sgml,v 1.28 2002/04/11 23:20:04 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -76,9 +76,10 @@ CREATE [ UNIQUE ] INDEX <replaceable class="parameter">index_name</replaceable>
|
|||||||
<term><replaceable class="parameter">acc_method</replaceable></term>
|
<term><replaceable class="parameter">acc_method</replaceable></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
The name of the access method to be used for
|
The name of the access method to be used for the index. The
|
||||||
the index. The default access method is <literal>BTREE</literal>.
|
default access method is <literal>BTREE</literal>.
|
||||||
<application>PostgreSQL</application> provides four access methods for indexes:
|
<application>PostgreSQL</application> provides four access
|
||||||
|
methods for indexes:
|
||||||
|
|
||||||
<variablelist>
|
<variablelist>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
@ -225,26 +226,27 @@ ERROR: Cannot create index: 'index_name' already exists.
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
In the second syntax shown above, an index is defined
|
In the second syntax shown above, an index is defined on the result
|
||||||
on the result of a user-specified function
|
of a user-specified function <replaceable
|
||||||
<replaceable class="parameter">func_name</replaceable> applied
|
class="parameter">func_name</replaceable> applied to one or more
|
||||||
to one or more columns of a single table.
|
columns of a single table. These <firstterm>functional
|
||||||
These <firstterm>functional indexes</firstterm>
|
indexes</firstterm> can be used to obtain fast access to data based
|
||||||
can be used to obtain fast access to data
|
on operators that would normally require some transformation to apply
|
||||||
based on operators that would normally require some
|
them to the base data. For example, a functional index on
|
||||||
transformation to apply them to the base data.
|
<literal>upper(col)</> would allow the clause
|
||||||
|
<literal>WHERE upper(col) = 'JIM'</> to use an index.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
<application>PostgreSQL</application> provides B-tree, R-tree, hash, and GiST access methods for
|
<application>PostgreSQL</application> provides B-tree, R-tree, hash,
|
||||||
indexes. The B-tree access method is an implementation of
|
and GiST access methods for indexes. The B-tree access method is an
|
||||||
Lehman-Yao high-concurrency B-trees. The R-tree access method
|
implementation of Lehman-Yao high-concurrency B-trees. The R-tree
|
||||||
implements standard R-trees using Guttman's quadratic split algorithm.
|
access method implements standard R-trees using Guttman's quadratic
|
||||||
The hash access method is an implementation of Litwin's linear
|
split algorithm. The hash access method is an implementation of
|
||||||
hashing. We mention the algorithms used solely to indicate that all
|
Litwin's linear hashing. We mention the algorithms used solely to
|
||||||
of these access methods are fully dynamic and do not have to be
|
indicate that all of these access methods are fully dynamic and do
|
||||||
optimized periodically (as is the case with, for example, static hash
|
not have to be optimized periodically (as is the case with, for
|
||||||
access methods).
|
example, static hash access methods).
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -338,18 +340,18 @@ ERROR: Cannot create index: 'index_name' already exists.
|
|||||||
|
|
||||||
<para>
|
<para>
|
||||||
An <firstterm>operator class</firstterm> can be specified for each
|
An <firstterm>operator class</firstterm> can be specified for each
|
||||||
column of an index. The operator class identifies the operators to
|
column of an index. The operator class identifies the operators to be
|
||||||
be used by the index for that column. For example, a B-tree index on
|
used by the index for that column. For example, a B-tree index on
|
||||||
four-byte integers would use the <literal>int4_ops</literal> class;
|
four-byte integers would use the <literal>int4_ops</literal> class;
|
||||||
this operator class includes comparison functions for four-byte
|
this operator class includes comparison functions for four-byte
|
||||||
integers. In practice the default operator class for the field's
|
integers. In practice the default operator class for the field's data
|
||||||
data type is usually sufficient. The main point of having operator classes
|
type is usually sufficient. The main point of having operator classes
|
||||||
is that for some data types, there could be more than one meaningful
|
is that for some data types, there could be more than one meaningful
|
||||||
ordering. For example, we might want to sort a complex-number data type
|
ordering. For example, we might want to sort a complex-number data
|
||||||
either by absolute value or by real part. We could do this by defining
|
type either by absolute value or by real part. We could do this by
|
||||||
two operator classes for the data type and then selecting the proper
|
defining two operator classes for the data type and then selecting
|
||||||
class when making an index. There are also some operator classes with
|
the proper class when making an index. There are also some operator
|
||||||
special purposes:
|
classes with special purposes:
|
||||||
|
|
||||||
<itemizedlist>
|
<itemizedlist>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.172 2002/04/02 08:51:50 inoue Exp $
|
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.173 2002/04/11 23:20:04 momjian Exp $
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
* The PerformAddAttribute() code, like most of the relation
|
* The PerformAddAttribute() code, like most of the relation
|
||||||
@ -604,10 +604,10 @@ AlterTableAlterColumnDropNotNull(Oid myrelid,
|
|||||||
elog(ERROR, "ALTER TABLE: Cannot alter system attribute \"%s\"",
|
elog(ERROR, "ALTER TABLE: Cannot alter system attribute \"%s\"",
|
||||||
colName);
|
colName);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check that the attribute is not in a primary key
|
* Check that the attribute is not in a primary key
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Loop over all indices on the relation */
|
/* Loop over all indices on the relation */
|
||||||
indexoidlist = RelationGetIndexList(rel);
|
indexoidlist = RelationGetIndexList(rel);
|
||||||
|
|
||||||
@ -986,9 +986,9 @@ AlterTableAlterColumnFlags(Oid myrelid,
|
|||||||
elog(ERROR, "ALTER TABLE: relation \"%s\" is not a table",
|
elog(ERROR, "ALTER TABLE: relation \"%s\" is not a table",
|
||||||
RelationGetRelationName(rel));
|
RelationGetRelationName(rel));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* we allow statistics case for system tables
|
* we allow statistics case for system tables
|
||||||
*/
|
*/
|
||||||
if (*flagType != 'S' &&
|
if (*flagType != 'S' &&
|
||||||
!allowSystemTableMods
|
!allowSystemTableMods
|
||||||
&& IsSystemRelationName(RelationGetRelationName(rel)))
|
&& IsSystemRelationName(RelationGetRelationName(rel)))
|
||||||
@ -1911,7 +1911,7 @@ LockTableCommand(LockStmt *lockstmt)
|
|||||||
/*
|
/*
|
||||||
* CREATE SCHEMA
|
* CREATE SCHEMA
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
CreateSchemaCommand(CreateSchemaStmt *stmt)
|
CreateSchemaCommand(CreateSchemaStmt *stmt)
|
||||||
{
|
{
|
||||||
const char *schemaName = stmt->schemaname;
|
const char *schemaName = stmt->schemaname;
|
||||||
@ -1976,13 +1976,13 @@ CreateSchemaCommand(CreateSchemaStmt *stmt)
|
|||||||
Node *parsetree = (Node *) lfirst(parsetree_item);
|
Node *parsetree = (Node *) lfirst(parsetree_item);
|
||||||
List *querytree_list,
|
List *querytree_list,
|
||||||
*querytree_item;
|
*querytree_item;
|
||||||
|
|
||||||
querytree_list = parse_analyze(parsetree, NULL);
|
querytree_list = parse_analyze(parsetree, NULL);
|
||||||
|
|
||||||
foreach(querytree_item, querytree_list)
|
foreach(querytree_item, querytree_list)
|
||||||
{
|
{
|
||||||
Query *querytree = (Query *) lfirst(querytree_item);
|
Query *querytree = (Query *) lfirst(querytree_item);
|
||||||
|
|
||||||
/* schemas should contain only utility stmts */
|
/* schemas should contain only utility stmts */
|
||||||
Assert(querytree->commandType == CMD_UTILITY);
|
Assert(querytree->commandType == CMD_UTILITY);
|
||||||
/* do this step */
|
/* do this step */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user