<!--
$Header: /home/projects/pgsql/cvsroot/pgsql/doc/src/sgml/populate.sgml,v 2.2 2000/03/31 03:27:41 thomas Exp $
-->

 <chapter>
  <title>Populating a Database</title>

  <note>
   <title>Author</title>
   <para>
    Written by Tom Lane, from an e-mail message dated 1999-12-05.
   </para>
  </note>

  <para>
   One may need to do a large number of table insertions when first
   populating a database. Here are some tips and techniques for making that as
   efficient as possible.
  </para>

  <sect1>
   <title>Disable Auto-commit</title>

   <para>
    Turn off auto-commit and just do one commit at
    the end.  Otherwise <productname>Postgres</productname> is doing a
    lot of work for each record
    added.  In general when you are doing bulk inserts, you want
    to turn off some of the database features to gain speed.
   </para>
  </sect1>

  <sect1>
   <title>Use COPY FROM</title>

   <para>
    Use <command>COPY FROM STDIN</command> to load all the records in one
    command, instead
    of a series of INSERT commands.  This reduces parsing, planning, etc
    overhead a great deal. If you do this then it's not necessary to fool
    around with autocommit.
   </para>
  </sect1>

  <sect1>
   <title>Remove Indices</title>

   <para>
    If you are loading a freshly created table, the fastest way is to
    create the table, bulk-load with COPY, then create any indexes needed
    for the table.  Creating an index on pre-existing data is quicker than
    updating it incrementally as each record is loaded.
   </para>

   <para>
    If you are augmenting an existing table, you can <command>DROP
     INDEX</command>, load the table, then recreate the index. Of
    course, the database performance for other users may be adversely 
    affected during the time that the index is missing.
   </para>
  </sect1>
 </chapter>

<!-- Keep this comment at the end of the file
Local variables:
mode:sgml
sgml-omittag:nil
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:
-->
