Commit 1ea081bb authored by Tom Lane's avatar Tom Lane

Suggest shell here-documents instead of psql -c for multiple commands.

The documentation suggested using "echo | psql", but not the often-superior
alternative of a here-document.  Also, be more direct about suggesting
that people avoid -c for multiple commands.  Per discussion.
parent 02b61dd0
...@@ -83,14 +83,15 @@ PostgreSQL documentation ...@@ -83,14 +83,15 @@ PostgreSQL documentation
(<filename>psqlrc</filename> and <filename>~/.psqlrc</filename>) are (<filename>psqlrc</filename> and <filename>~/.psqlrc</filename>) are
ignored with this option. ignored with this option.
</para> </para>
<para><replaceable class="parameter">command</replaceable> must be either <para>
<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 with this option. To achieve that, you could
pipe the string into <application>psql</application>, like pipe the string into <application>psql</application>, for example:
this: <literal>echo '\x \\ SELECT * FROM foo;' | psql</literal>. <literal>echo '\x \\ SELECT * FROM foo;' | psql</literal>.
(<literal>\\</> is the separator meta-command.) (<literal>\\</> is the separator meta-command.)
</para> </para>
<para> <para>
...@@ -102,6 +103,19 @@ PostgreSQL documentation ...@@ -102,6 +103,19 @@ PostgreSQL documentation
<application>psql</application>'s standard input. Also, only <application>psql</application>'s standard input. Also, only
the result of the last SQL command is returned. the result of the last SQL command is returned.
</para> </para>
<para>
Because of these legacy behaviors, putting more than one command in
the <option>-c</option> string often has unexpected results. It's
better to feed multiple commands to <application>psql</application>'s
standard input, either using <application>echo</application> as
illustrated above, or via a shell here-document, for example:
<programlisting>
psql &lt;&lt;EOF
\x
SELECT * FROM foo;
EOF
</programlisting>
</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment