From: Tom Lane Date: Fri, 14 Feb 2014 17:54:58 +0000 (-0500) Subject: Suggest shell here-documents instead of psql -c for multiple commands. X-Git-Tag: REL8_4_20~13 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b0154f20b3bb7c74332f5cbf51baf7ebc68c80b4;p=thirdparty%2Fpostgresql.git 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. --- diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index 49ad740a4c3..803fc503a64 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -88,8 +88,8 @@ PostgreSQL documentation or a single backslash command. Thus you cannot mix SQL and psql meta-commands with this option. To achieve that, you could - pipe the string into psql, like - this: echo '\x \\ SELECT * FROM foo;' | psql. + pipe the string into psql, for example: + echo '\x \\ SELECT * FROM foo;' | psql. (\\ is the separator meta-command.) @@ -98,7 +98,21 @@ PostgreSQL documentation BEGIN/COMMIT commands included in the string to divide it into multiple transactions. This is different from the behavior when the same string is fed to - psql's standard input. + psql's standard input. Also, only + the result of the last SQL command is returned. + + + Because of these legacy behaviors, putting more than one command in + the string often has unexpected results. It's + better to feed multiple commands to psql's + standard input, either using echo as + illustrated above, or via a shell here-document, for example: + +psql <<EOF +\x +SELECT * FROM foo; +EOF +