1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-29 10:41:53 +03:00

Doc: recommend "psql -X" for restoring pg_dump scripts.

This practice avoids possible problems caused by non-default psql
options, such as disabling AUTOCOMMIT.

Author: Shinya Kato <Shinya11.Kato@oss.nttdata.com>
Reviewed-by: Robert Treat <rob@xzilla.net>
Discussion: https://postgr.es/m/96ff23a5d858ff72ca8e823a014d16fe@oss.nttdata.com
Backpatch-through: 13
This commit is contained in:
Tom Lane
2025-01-25 12:42:05 -05:00
parent 8cedf6a1b9
commit c768f54a25
3 changed files with 36 additions and 11 deletions

View File

@ -106,10 +106,10 @@ pg_dump <replaceable class="parameter">dbname</replaceable> &gt; <replaceable cl
<para> <para>
Text files created by <application>pg_dump</application> are intended to Text files created by <application>pg_dump</application> are intended to
be read in by the <application>psql</application> program. The be read by the <application>psql</application> program using its default
general command form to restore a dump is settings. The general command form to restore a text dump is
<synopsis> <synopsis>
psql <replaceable class="parameter">dbname</replaceable> &lt; <replaceable class="parameter">dumpfile</replaceable> psql -X <replaceable class="parameter">dbname</replaceable> &lt; <replaceable class="parameter">dumpfile</replaceable>
</synopsis> </synopsis>
where <replaceable class="parameter">dumpfile</replaceable> is the where <replaceable class="parameter">dumpfile</replaceable> is the
file output by the <application>pg_dump</application> command. The database <replaceable file output by the <application>pg_dump</application> command. The database <replaceable
@ -117,11 +117,17 @@ psql <replaceable class="parameter">dbname</replaceable> &lt; <replaceable class
command, so you must create it yourself from <literal>template0</literal> command, so you must create it yourself from <literal>template0</literal>
before executing <application>psql</application> (e.g., with before executing <application>psql</application> (e.g., with
<literal>createdb -T template0 <replaceable <literal>createdb -T template0 <replaceable
class="parameter">dbname</replaceable></literal>). <application>psql</application> class="parameter">dbname</replaceable></literal>).
To ensure <application>psql</application> runs with its default settings,
use the <option>-X</option> (<option>--no-psqlrc</option>) option.
<application>psql</application>
supports options similar to <application>pg_dump</application> for specifying supports options similar to <application>pg_dump</application> for specifying
the database server to connect to and the user name to use. See the database server to connect to and the user name to use. See
the <xref linkend="app-psql"/> reference page for more information. the <xref linkend="app-psql"/> reference page for more information.
Non-text file dumps are restored using the <xref </para>
<para>
Non-text file dumps should be restored using the <xref
linkend="app-pgrestore"/> utility. linkend="app-pgrestore"/> utility.
</para> </para>
@ -141,7 +147,7 @@ psql <replaceable class="parameter">dbname</replaceable> &lt; <replaceable class
behavior and have <application>psql</application> exit with an behavior and have <application>psql</application> exit with an
exit status of 3 if an SQL error occurs: exit status of 3 if an SQL error occurs:
<programlisting> <programlisting>
psql --set ON_ERROR_STOP=on <replaceable>dbname</replaceable> &lt; <replaceable>dumpfile</replaceable> psql -X --set ON_ERROR_STOP=on <replaceable>dbname</replaceable> &lt; <replaceable>dumpfile</replaceable>
</programlisting> </programlisting>
Either way, you will only have a partially restored database. Either way, you will only have a partially restored database.
Alternatively, you can specify that the whole dump should be Alternatively, you can specify that the whole dump should be
@ -160,7 +166,7 @@ psql --set ON_ERROR_STOP=on <replaceable>dbname</replaceable> &lt; <replaceable>
write to or read from pipes makes it possible to dump a database write to or read from pipes makes it possible to dump a database
directly from one server to another, for example: directly from one server to another, for example:
<programlisting> <programlisting>
pg_dump -h <replaceable>host1</replaceable> <replaceable>dbname</replaceable> | psql -h <replaceable>host2</replaceable> <replaceable>dbname</replaceable> pg_dump -h <replaceable>host1</replaceable> <replaceable>dbname</replaceable> | psql -X -h <replaceable>host2</replaceable> <replaceable>dbname</replaceable>
</programlisting> </programlisting>
</para> </para>
@ -205,7 +211,7 @@ pg_dumpall &gt; <replaceable>dumpfile</replaceable>
</synopsis> </synopsis>
The resulting dump can be restored with <application>psql</application>: The resulting dump can be restored with <application>psql</application>:
<synopsis> <synopsis>
psql -f <replaceable class="parameter">dumpfile</replaceable> postgres psql -X -f <replaceable class="parameter">dumpfile</replaceable> postgres
</synopsis> </synopsis>
(Actually, you can specify any existing database name to start from, (Actually, you can specify any existing database name to start from,
but if you are loading into an empty cluster then <literal>postgres</literal> but if you are loading into an empty cluster then <literal>postgres</literal>

View File

@ -1410,6 +1410,14 @@ CREATE DATABASE foo WITH TEMPLATE template0;
subscriber if the subscription had been originally created with subscriber if the subscription had been originally created with
<literal>two_phase = true</literal> option. <literal>two_phase = true</literal> option.
</para> </para>
<para>
It is generally recommended to use the <option>-X</option>
(<option>--no-psqlrc</option>) option when restoring a database from a
plain-text <application>pg_dump</application> script to ensure a clean
restore process and prevent potential conflicts with
non-default <application>psql</application> configurations.
</para>
</refsect1> </refsect1>
<refsect1 id="pg-dump-examples" xreflabel="Examples"> <refsect1 id="pg-dump-examples" xreflabel="Examples">
@ -1427,7 +1435,7 @@ CREATE DATABASE foo WITH TEMPLATE template0;
<literal>newdb</literal>: <literal>newdb</literal>:
<screen> <screen>
<prompt>$</prompt> <userinput>psql -d newdb -f db.sql</userinput> <prompt>$</prompt> <userinput>psql -X -d newdb -f db.sql</userinput>
</screen> </screen>
</para> </para>

View File

@ -786,6 +786,17 @@ PostgreSQL documentation
database creation will fail for databases in non-default database creation will fail for databases in non-default
locations. locations.
</para> </para>
<para>
It is generally recommended to use the <option>-X</option>
(<option>--no-psqlrc</option>) option when restoring a database from a
<application>pg_dumpall</application> script to ensure a clean restore
process and prevent potential conflicts with non-default
<application>psql</application> configurations. Additionally, because
the <application>pg_dumpall</application> script may
include <application>psql</application> meta-commands, it may be
incompatible with clients other than <application>psql</application>.
</para>
</refsect1> </refsect1>
@ -802,9 +813,9 @@ PostgreSQL documentation
<para> <para>
To restore database(s) from this file, you can use: To restore database(s) from this file, you can use:
<screen> <screen>
<prompt>$</prompt> <userinput>psql -f db.out postgres</userinput> <prompt>$</prompt> <userinput>psql -X -f db.out -d postgres</userinput>
</screen> </screen>
It is not important to which database you connect here since the It is not important which database you connect to here since the
script file created by <application>pg_dumpall</application> will script file created by <application>pg_dumpall</application> will
contain the appropriate commands to create and connect to the saved contain the appropriate commands to create and connect to the saved
databases. An exception is that if you specified <option>--clean</option>, databases. An exception is that if you specified <option>--clean</option>,