Commit f8fe328c authored by Tom Lane's avatar Tom Lane

Some small editorialization on the description of CREATE INDEX

CONCURRENTLY.  Greg Stark, some further tweaks by me.
parent 0b4bf853
<!-- $PostgreSQL: pgsql/doc/src/sgml/indices.sgml,v 1.60 2006/09/10 00:29:34 tgl Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/indices.sgml,v 1.61 2006/09/13 23:42:26 tgl Exp $ -->
<chapter id="indexes"> <chapter id="indexes">
<title id="indexes-title">Indexes</title> <title id="indexes-title">Indexes</title>
...@@ -93,8 +93,9 @@ CREATE INDEX test1_id_index ON test1 (id); ...@@ -93,8 +93,9 @@ CREATE INDEX test1_id_index ON test1 (id);
<para> <para>
Creating an index on a large table can take a long time. By default, Creating an index on a large table can take a long time. By default,
<productname>PostgreSQL</productname> allows reads (selects) to occur <productname>PostgreSQL</productname> allows reads (selects) to occur
on the table in parallel with index creation, but writes (inserts, on the table in parallel with creation of an index, but writes (inserts,
updates, deletes) are blocked until the index build is finished. updates, deletes) are blocked until the index build is finished.
In production environments this is often unacceptable.
It is possible to allow writes to occur in parallel with index It is possible to allow writes to occur in parallel with index
creation, but there are several caveats to be aware of &mdash; creation, but there are several caveats to be aware of &mdash;
for more information see <xref linkend="SQL-CREATEINDEX-CONCURRENTLY" for more information see <xref linkend="SQL-CREATEINDEX-CONCURRENTLY"
......
<!-- <!--
$PostgreSQL: pgsql/doc/src/sgml/ref/create_index.sgml,v 1.56 2006/08/25 04:06:45 tgl Exp $ $PostgreSQL: pgsql/doc/src/sgml/ref/create_index.sgml,v 1.57 2006/09/13 23:42:26 tgl Exp $
PostgreSQL documentation PostgreSQL documentation
--> -->
...@@ -264,22 +264,19 @@ CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] <replaceable class="parameter">name</re ...@@ -264,22 +264,19 @@ CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] <replaceable class="parameter">name</re
</indexterm> </indexterm>
<para> <para>
Creating an index for a large table can be a long operation. In large data Creating an index can interfere with regular operation of a database.
warehousing applications it can easily take hours or even days to build
indexes. It's important to understand the impact creating indexes has on a
system.
</para>
<para>
Normally <productname>PostgreSQL</> locks the table to be indexed against Normally <productname>PostgreSQL</> locks the table to be indexed against
writes and performs the entire index build with a single scan of the writes and performs the entire index build with a single scan of the
table. Other transactions can still read the table, but if they try to table. Other transactions can still read the table, but if they try to
insert, update, or delete rows in the table they will block until the insert, update, or delete rows in the table they will block until the
index build is finished. index build is finished. This could have a severe effect if the system is
a live production database. Large tables can take many hours to be
indexed, and even for smaller tables, an index build can lock out writers
for periods that are unacceptably long for a production system.
</para> </para>
<para> <para>
<productname>PostgreSQL</> also supports building indexes without locking <productname>PostgreSQL</> supports building indexes without locking
out writes. This method is invoked by specifying the out writes. This method is invoked by specifying the
<literal>CONCURRENTLY</> option of <command>CREATE INDEX</>. <literal>CONCURRENTLY</> option of <command>CREATE INDEX</>.
When this option is used, When this option is used,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment