@ -39,9 +39,9 @@ PostgreSQL documentation
queries interactively, issue them to
queries interactively, issue them to
<productname>PostgreSQL</productname>, and see the query results.
<productname>PostgreSQL</productname>, and see the query results.
Alternatively, input can be from a file or from command line
Alternatively, input can be from a file or from command line
arguments. In addition, it provides a number of meta-commands and various
arguments. In addition, <application>psql</application> provides a
shell-like features to facilitate writing scripts and automating a wide
number of meta-commands and various shell-like features to
variety of tasks.
facilitate writing scripts and automating a wide variety of tasks.
</para>
</para>
</refsect1>
</refsect1>
@ -90,42 +90,50 @@ PostgreSQL documentation
<term><option>--command=<replaceable class="parameter">command</replaceable></></term>
<term><option>--command=<replaceable class="parameter">command</replaceable></></term>
<listitem>
<listitem>
<para>
<para>
Specifies that <application>psql</application> is to execute the given
Specifies that <application>psql</application> is to execute the given
command string, <replaceable class="parameter">command</replaceable>.
command string, <replaceable class="parameter">command</replaceable>.
This option can be repeated and combined in any order with
This option can be repeated and combined in any order with
the <option>-f</option> option.
the <option>-f</option> option. When either <option>-c</option>
or <option>-f</option> is specified, <application>psql</application>
does not read commands from standard input; instead it terminates
after processing all the <option>-c</option> and <option>-f</option>
options in sequence.
</para>
</para>
<para>
<para>
<replaceable class="parameter">command</replaceable> must be either
<replaceable class="parameter">command</replaceable> must be either
a command string that is completely parsable by the server (i.e.,
a command string that is completely parsable by the server (i.e.,
it contains no <application>psql</application>-specific features),
it contains no <application>psql</application>-specific features),
or a single backslash command. Thus you cannot mix
or a single backslash command. Thus you cannot mix
<acronym>SQL</acronym> and <application>psql</application>
<acronym>SQL</acronym> and <application>psql</application>
meta-commands with this option. To achieve that, you could
meta-commands within a <option>-c</option> option. To achieve that,
use repeated <option>-c</option> options or pipe the string
you could use repeated <option>-c</option> options or pipe the string
into <application>psql</application>, for example:
into <application>psql</application>, for example:
<literal>psql -c '\x' -c 'SELECT * FROM foo;'</literal> or
<programlisting>
<literal>echo '\x \\ SELECT * FROM foo;' | psql</literal>.
psql -c '\x' -c 'SELECT * FROM foo;'
(<literal>\\</> is the separator meta-command.)
</programlisting>
or
<programlisting>
echo '\x \\ SELECT * FROM foo;' | psql
</programlisting>
(<literal>\\</> is the separator meta-command.)
</para>
</para>
<para>
<para>
Each command string passed to <option>-c</option> is sent to the server
Each <acronym>SQL</acronym> command string passed
as a single query. Because of this, the server executes it as a single
to <option>-c</option> is sent to the server as a single query.
transaction, even if a command string contains
Because of this, the server executes it as a single transaction even
multiple <acronym>SQL</acronym> commands, unless there are
if the string contains multiple <acronym>SQL</acronym> commands,
explicit <command>BEGIN</>/<command>COMMIT</> commands included in the
unless there are explicit <command>BEGIN</>/<command>COMMIT</>
string to divide it into multiple transactions. Also, the server only
commands included in the string to divide it into multiple
returns the result of the last <acronym>SQL</acronym> command to the
transactions. Also, <application>psql</application> only prints the
client. This is different from the behavior when the same string with
result of the last <acronym>SQL</acronym> command in the string.
multiple <acronym>SQL</acronym> commands is fed
This is different from the behavior when the same string is read from
to <application>psql</application>'s standard input because
a file or fed to <application>psql</application>'s standard input,
then <application>psql</application> sends each <acronym>SQL</acronym>
because then <application>psql</application> sends
command separately.
each <acronym>SQL</acronym> command separately.
</para>
</para>
<para>
<para>
Putting more than one command in the <option>-c</option> string often
Because of this behavior, putting more than one command in a
has unexpected results. This is a result of the fact that the whole
single <option>-c</option> string often has unexpected results.
string is sent to the server as a single query.
It's better to use repeated <option>-c</option> commands or feed
It's better to use repeated <option>-c</option> commands or feed
multiple commands to <application>psql</application>'s standard input,
multiple commands to <application>psql</application>'s standard input,
either using <application>echo</application> as illustrated above, or
either using <application>echo</application> as illustrated above, or
@ -192,18 +200,26 @@ EOF
<term><option>--file=<replaceable class="parameter">filename</replaceable></></term>
<term><option>--file=<replaceable class="parameter">filename</replaceable></></term>
<listitem>
<listitem>
<para>
<para>
Use the file <replaceable class="parameter">filename</replaceable>
Read commands from the
as the source of commands instead of reading commands interactively.
file <replaceable class="parameter">filename</replaceable>,
This option can be repeated and combined in any order with
rather than standard input.
the <option>-c</option> option. After the commands in
This option can be repeated and combined in any order with
every <option>-c</option> command string and <option>-f</option> file
the <option>-c</option> option. When either <option>-c</option>
are processed, <application>psql</application> terminates. This option
or <option>-f</option> is specified, <application>psql</application>
is in many ways equivalent to the meta-command <command>\i</command>.
does not read commands from standard input; instead it terminates
after processing all the <option>-c</option> and <option>-f</option>
options in sequence.
Except for that, this option is largely equivalent to the
meta-command <command>\i</command>.
</para>
</para>
<para>
<para>
If <replaceable>filename</replaceable> is <literal>-</literal>
If <replaceable>filename</replaceable> is <literal>-</literal>
(hyphen), then standard input is read.
(hyphen), then standard input is read until an EOF indication
or <command>\q</> meta-command. This can be used to intersperse
interactive input with input from files. Note however that Readline
is not used in this case (much as if <option>-n</option> had been
specified).
</para>
</para>
<para>
<para>
@ -550,12 +566,13 @@ EOF
<term><option>--single-transaction</option></term>
<term><option>--single-transaction</option></term>
<listitem>
<listitem>
<para>
<para>
When <application>psql</application> executes commands from a script
This option can only be used in combination with one or more
and/or a <option>-c</option> option, adding this option
<option>-c</option> and/or <option>-f</option> options. It causes
wraps <command>BEGIN</>/<command>COMMIT</> around all of those
<application>psql</application> to issue a <command>BEGIN</> command
commands as a whole to execute them as a single transaction. This
before the first such option and a <command>COMMIT</> command after
ensures that either all the commands complete successfully, or no
the last one, thereby wrapping all the commands into a single
changes are applied.
transaction. This ensures that either all the commands complete
successfully, or no changes are applied.
</para>
</para>
<para>
<para>
@ -3799,16 +3816,6 @@ PSQL_EDITOR_LINENUMBER_ARG='--line '
<title>Notes</title>
<title>Notes</title>
<itemizedlist>
<itemizedlist>
<listitem>
<para>
In an earlier life <application>psql</application> allowed the
first argument of a single-letter backslash command to start
directly after the command, without intervening whitespace.
As of <productname>PostgreSQL</productname> 8.4 this is no
longer allowed.
</para>
</listitem>
<listitem>
<listitem>
<para><application>psql</application> works best with servers of the same
<para><application>psql</application> works best with servers of the same
or an older major version. Backslash commands are particularly likely
or an older major version. Backslash commands are particularly likely
@ -3824,8 +3831,8 @@ PSQL_EDITOR_LINENUMBER_ARG='--line '
If you want to use <application>psql</application> to connect to several
If you want to use <application>psql</application> to connect to several
servers of different major versions, it is recommended that you use the
servers of different major versions, it is recommended that you use the
newest version of <application>psql</application>. Alternatively, you
newest version of <application>psql</application>. Alternatively, you
can keep a copy of <application>psql</application> from each major
can keep around a copy of <application>psql</application> from each
version around and be sure to use the version that matches the
major version and be sure to use the version that matches the
respective server. But in practice, this additional complication should
respective server. But in practice, this additional complication should
not be necessary.
not be necessary.
</para>
</para>
@ -3833,8 +3840,19 @@ PSQL_EDITOR_LINENUMBER_ARG='--line '
<listitem>
<listitem>
<para>
<para>
Before <productname>PostgreSQL</productname> 9.6, <option>-c</option>
Before <productname>PostgreSQL</productname> 9.6,
implied <option>-X</option>; this is no longer the case.
the <option>-c</option> option implied <option>-X</option>
(<option>--no-psqlrc</>); this is no longer the case.
</para>
</listitem>
<listitem>
<para>
Before <productname>PostgreSQL</productname> 8.4,
<application>psql</application> allowed the
first argument of a single-letter backslash command to start
directly after the command, without intervening whitespace.
Now, some whitespace is required.
</para>
</para>
</listitem>
</listitem>
</itemizedlist>
</itemizedlist>