From e7cf0b89fbf6a0c6e2fa7ece01197e9b6d6f48d3 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 14 Feb 2014 12:54:50 -0500 Subject: [PATCH] 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. --- doc/src/sgml/ref/psql-ref.sgml | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index 4c65dc3e98..29631c0d7c 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -83,14 +83,15 @@ PostgreSQL documentation (psqlrc and ~/.psqlrc) are ignored with this option. - command must be either + + command must be either a command string that is completely parsable by the server (i.e., it contains no psql-specific features), 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.) @@ -102,6 +103,19 @@ PostgreSQL documentation 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 + + -- 2.40.0