⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 backup.sgml

📁 PostgreSQL7.4.6 for Linux
💻 SGML
📖 第 1 页 / 共 2 页
字号:
<!--$Header: /cvsroot/pgsql/doc/src/sgml/backup.sgml,v 2.30.2.1 2003/11/04 09:45:29 petere Exp $--><chapter id="backup"> <title>Backup and Restore</title> <indexterm zone="backup"><primary>backup</></> <para>  As everything that contains valuable data, <productname>PostgreSQL</>  databases should be backed up regularly. While the procedure is  essentially simple, it is important to have a basic understanding of  the underlying techniques and assumptions. </para> <para>  There are two fundamentally different approaches to backing up  <productname>PostgreSQL</> data:  <itemizedlist>   <listitem><para><acronym>SQL</> dump</para></listitem>   <listitem><para>File system level backup</para></listitem>  </itemizedlist> </para> <sect1 id="backup-dump">  <title><acronym>SQL</> Dump</title>  <para>   The idea behind the SQL-dump method is to generate a text file with SQL   commands that, when fed back to the server, will recreate the   database in the same state as it was at the time of the dump.   <productname>PostgreSQL</> provides the utility program   <application>pg_dump</> for this purpose. The basic usage of this   command is:<synopsis>pg_dump <replaceable class="parameter">dbname</replaceable> &gt; <replaceable class="parameter">outfile</replaceable></synopsis>   As you see, <application>pg_dump</> writes its results to the   standard output. We will see below how this can be useful.  </para>  <para>   <application>pg_dump</> is a regular <productname>PostgreSQL</>   client application (albeit a particularly clever one). This means   that you can do this backup procedure from any remote host that has   access to the database. But remember that <application>pg_dump</>   does not operate with special permissions. In particular, you must   have read access to all tables that you want to back up, so in   practice you almost always have to be a database superuser.  </para>  <para>   To specify which database server <application>pg_dump</> should   contact, use the command line options <option>-h   <replaceable>host</></> and <option>-p <replaceable>port</></>. The   default host is the local host or whatever your   <envar>PGHOST</envar> environment variable specifies. Similarly,   the default port is indicated by the <envar>PGPORT</envar>   environment variable or, failing that, by the compiled-in default.   (Conveniently, the server will normally have the same compiled-in   default.)  </para>  <para>   As any other <productname>PostgreSQL</> client application,   <application>pg_dump</> will by default connect with the database   user name that is equal to the current operating system user name. To override   this, either specify the <option>-U</option> option or set the   environment variable <envar>PGUSER</envar>. Remember that   <application>pg_dump</> connections are subject to the normal   client authentication mechanisms (which are described in <xref   linkend="client-authentication">).  </para>  <para>   Dumps created by <application>pg_dump</> are internally consistent,   that is, updates to the database while <application>pg_dump</> is   running will not be in the dump. <application>pg_dump</> does not   block other operations on the database while it is working.   (Exceptions are those operations that need to operate with an   exclusive lock, such as <command>VACUUM FULL</command>.)  </para>  <important>   <para>    When your database schema relies on OIDs (for instance as foreign    keys) you must instruct <application>pg_dump</> to dump the OIDs    as well. To do this, use the <option>-o</option> command line    option.  <quote>Large objects</> are not dumped by default, either.    See <application>pg_dump</>'s command reference page if you use    large objects.   </para>  </important>  <sect2 id="backup-dump-restore">   <title>Restoring the dump</title>   <para>    The text files created by <application>pg_dump</> are intended to    be read in by the <application>psql</application> program. The    general command form to restore a dump is<synopsis>psql <replaceable class="parameter">dbname</replaceable> &lt; <replaceable class="parameter">infile</replaceable></synopsis>    where <replaceable class="parameter">infile</replaceable> is what    you used as <replaceable class="parameter">outfile</replaceable>    for the <command>pg_dump</> command. The database <replaceable    class="parameter">dbname</replaceable> will not be created by this    command, you must create it yourself from <literal>template0</> before executing    <application>psql</> (e.g., with <literal>createdb -T template0    <replaceable class="parameter">dbname</></literal>).    <application>psql</> supports similar options to <application>pg_dump</>     for controlling the database server location and the user name. See    its reference page for more information.   </para>   <para>    If the objects in the original database were owned by different    users, then the dump will instruct <application>psql</> to connect    as each affected user in turn and then create the relevant    objects. This way the original ownership is preserved. This also    means, however, that all these users must already exist, and    furthermore that you must be allowed to connect as each of them.    It might therefore be necessary to temporarily relax the client    authentication settings.   </para>   <para>    Once restored, it is wise to run <command>ANALYZE</> on each    database so the optimizer has useful statistics. You    can also run <command>vacuumdb -a -z</> to <command>ANALYZE</> all    databases.   </para>   <para>    The ability of <application>pg_dump</> and <application>psql</> to    write to or read from pipes makes it possible to dump a database    directly from one server to another; for example:<programlisting>pg_dump -h <replaceable>host1</> <replaceable>dbname</> | psql -h <replaceable>host2</> <replaceable>dbname</></programlisting>   </para>   <important>    <para>     The dumps produced by <application>pg_dump</> are relative to     <literal>template0</>. This means that any languages, procedures,     etc. added to <literal>template1</> will also be dumped by     <application>pg_dump</>. As a result, when restoring, if you are     using a customized <literal>template1</>, you must create the     empty database from <literal>template0</>, as in the example     above.    </para>   </important>   <tip>    <para>    Restore performance can be improved by increasing the    configuration parameter <varname>sort_mem</varname> (see <xref    linkend="runtime-config-resource-memory">).    </para>   </tip>  </sect2>  <sect2 id="backup-dump-all">   <title>Using <command>pg_dumpall</></title>   <para>    The above mechanism is cumbersome and inappropriate when backing    up an entire database cluster. For this reason the    <application>pg_dumpall</> program is provided.    <application>pg_dumpall</> backs up each database in a given    cluster, and also preserves cluster-wide data such as    users and groups. The call sequence for    <application>pg_dumpall</> is simply<synopsis>pg_dumpall &gt; <replaceable>outfile</></synopsis>    The resulting dump can be restored with <application>psql</>:<synopsis>psql template1 &lt; <replaceable class="parameter">infile</replaceable></synopsis>    (Actually, you can specify any existing database name to start from,    but if you are reloading in an empty cluster then <literal>template1</>    is the only available choice.)  It is always necessary to have    database superuser access when restoring a <application>pg_dumpall</>    dump, as that is required to restore the user and group information.   </para>  </sect2>  <sect2 id="backup-dump-large">   <title>Large Databases</title>   <para>    Since <productname>PostgreSQL</productname> allows tables larger    than the maximum file size on your system, it can be problematic    to dump such a table to a file, since the resulting file will likely    be larger than the maximum size allowed by your system. As    <application>pg_dump</> can write to the standard output, you can    just use standard Unix tools to work around this possible problem.   </para>   <formalpara>    <title>Use compressed dumps.</title>    <para>     You can use your favorite compression program, for example     <application>gzip</application>.<programlisting>pg_dump <replaceable class="parameter">dbname</replaceable> | gzip &gt; <replaceable class="parameter">filename</replaceable>.gz</programlisting>     Reload with<programlisting>createdb <replaceable class="parameter">dbname</replaceable>gunzip -c <replaceable class="parameter">filename</replaceable>.gz | psql <replaceable class="parameter">dbname</replaceable></programlisting>     or<programlisting>cat <replaceable class="parameter">filename</replaceable>.gz | gunzip | psql <replaceable class="parameter">dbname</replaceable></programlisting>    </para>   </formalpara>   <formalpara>    <title>Use <command>split</>.</title>    <para>     The <command>split</command> command     allows you to split the output into pieces that are     acceptable in size to the underlying file system. For example, to     make chunks of 1 megabyte:<programlisting>pg_dump <replaceable class="parameter">dbname</replaceable> | split -b 1m - <replaceable class="parameter">filename</replaceable></programlisting>     Reload with<programlisting>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -