mirror of https://github.com/postgres/postgres
parent
045573983a
commit
99281cf881
@ -0,0 +1,75 @@ |
|||||||
|
<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: |
||||||
|
--> |
||||||
Loading…
Reference in new issue