]> granicus.if.org Git - postgresql/blobdiff - doc/src/sgml/ref/psql-ref.sgml
Add a \gexec command to psql for evaluation of computed queries.
[postgresql] / doc / src / sgml / ref / psql-ref.sgml
index a6370014987d5d69f4cfda862b93cd182d705c15..d8b9a03ee0ee9f1d32e0bdbf7b9031f93661c469 100644 (file)
@@ -38,7 +38,8 @@ PostgreSQL documentation
      <productname>PostgreSQL</productname>. It enables you to type in
      queries interactively, issue them to
      <productname>PostgreSQL</productname>, and see the query results.
-     Alternatively, input can be from a file. In addition, it provides a
+     Alternatively, input can be from a file or from command line
+     arguments. In addition, <application>psql</application> provides a
      number of meta-commands and various shell-like features to
      facilitate writing scripts and automating a wide variety of tasks.
     </para>
@@ -89,38 +90,54 @@ PostgreSQL documentation
       <term><option>--command=<replaceable class="parameter">command</replaceable></></term>
       <listitem>
       <para>
-      Specifies that <application>psql</application> is to execute one
-      command string, <replaceable class="parameter">command</replaceable>,
-      and then exit. This is useful in shell scripts. Start-up files
-      (<filename>psqlrc</filename> and <filename>~/.psqlrc</filename>) are
-      ignored with this option.
+       Specifies that <application>psql</application> is to execute the given
+       command string, <replaceable class="parameter">command</replaceable>.
+       This option can be repeated and combined in any order with
+       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>
-      <replaceable class="parameter">command</replaceable> must be either
-      a command string that is completely parsable by the server (i.e.,
-      it contains no <application>psql</application>-specific features),
-      or a single backslash command. Thus you cannot mix
-      <acronym>SQL</acronym> and <application>psql</application>
-      meta-commands with this option. To achieve that, you could
-      pipe the string into <application>psql</application>, for example:
-      <literal>echo '\x \\ SELECT * FROM foo;' | psql</literal>.
-      (<literal>\\</> is the separator meta-command.)
+       <replaceable class="parameter">command</replaceable> must be either
+       a command string that is completely parsable by the server (i.e.,
+       it contains no <application>psql</application>-specific features),
+       or a single backslash command. Thus you cannot mix
+       <acronym>SQL</acronym> and <application>psql</application>
+       meta-commands within a <option>-c</option> option. To achieve that,
+       you could use repeated <option>-c</option> options or pipe the string
+       into <application>psql</application>, for example:
+<programlisting>
+psql -c '\x' -c 'SELECT * FROM foo;'
+</programlisting>
+       or
+<programlisting>
+echo '\x \\ SELECT * FROM foo;' | psql
+</programlisting>
+       (<literal>\\</> is the separator meta-command.)
       </para>
       <para>
-       If the command string contains multiple SQL commands, they are
-       processed in a single transaction, unless there are explicit
-       <command>BEGIN</>/<command>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
-       <application>psql</application>'s standard input.  Also, only
-       the result of the last SQL command is returned.
+       Each <acronym>SQL</acronym> command string passed
+       to <option>-c</option> is sent to the server as a single query.
+       Because of this, the server executes it as a single transaction even
+       if the string contains multiple <acronym>SQL</acronym> commands,
+       unless there are explicit <command>BEGIN</>/<command>COMMIT</>
+       commands included in the string to divide it into multiple
+       transactions.  Also, <application>psql</application> only prints the
+       result of the last <acronym>SQL</acronym> command in the string.
+       This is different from the behavior when the same string is read from
+       a file or fed to <application>psql</application>'s standard input,
+       because then <application>psql</application> sends
+       each <acronym>SQL</acronym> command separately.
       </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:
+       Because of this behavior, putting more than one command in a
+       single <option>-c</option> string often has unexpected results.
+       It's better to use repeated <option>-c</option> commands or 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
@@ -183,16 +200,26 @@ EOF
       <term><option>--file=<replaceable class="parameter">filename</replaceable></></term>
       <listitem>
       <para>
-      Use the file <replaceable class="parameter">filename</replaceable>
-      as the source of commands instead of reading commands interactively.
-      After the file is processed, <application>psql</application>
-      terminates. This is in many ways equivalent to the meta-command
-      <command>\i</command>.
+       Read commands from the
+       file <replaceable class="parameter">filename</replaceable>,
+       rather than standard input.
+       This option can be repeated and combined in any order with
+       the <option>-c</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.
+       Except for that, this option is largely equivalent to the
+       meta-command <command>\i</command>.
       </para>
 
       <para>
        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>
@@ -539,20 +566,22 @@ EOF
       <term><option>--single-transaction</option></term>
       <listitem>
        <para>
-        When <application>psql</application> executes a script, adding
-        this option wraps <command>BEGIN</>/<command>COMMIT</> around the
-        script to execute it as a single transaction.  This ensures that
-        either all the commands complete successfully, or no changes are
-        applied.
+        This option can only be used in combination with one or more
+        <option>-c</option> and/or <option>-f</option> options.  It causes
+        <application>psql</application> to issue a <command>BEGIN</> command
+        before the first such option and a <command>COMMIT</> command after
+        the last one, thereby wrapping all the commands into a single
+        transaction.  This ensures that either all the commands complete
+        successfully, or no changes are applied.
        </para>
 
        <para>
-        If the script itself uses <command>BEGIN</>, <command>COMMIT</>,
+        If the commands themselves
+        contain <command>BEGIN</>, <command>COMMIT</>,
         or <command>ROLLBACK</>, this option will not have the desired
-        effects.
-        Also, if the script contains any command that cannot be executed
-        inside a transaction block, specifying this option will cause that
-        command (and hence the whole transaction) to fail.
+        effects.  Also, if an individual command cannot be executed inside a
+        transaction block, specifying this option will cause the whole
+        transaction to fail.
        </para>
       </listitem>
      </varlistentry>
@@ -564,11 +593,11 @@ EOF
       <para>
       Show help about <application>psql</application> and exit. The optional
       <replaceable class="parameter">topic</> parameter (defaulting
-      to <literal>options</literal>) selects which part of psql is
+      to <literal>options</literal>) selects which part of <application>psql</application> is
       explained: <literal>commands</> describes <application>psql</>'s
-      backslash commands; <literal>options</> describes the commandline
-      switches that can be passed to <application>psql</>;
-      and <literal>variables</> shows help about about psql configuration
+      backslash commands; <literal>options</> describes the command-line
+      options that can be passed to <application>psql</>;
+      and <literal>variables</> shows help about <application>psql</application> configuration
       variables.
       </para>
       </listitem>
@@ -796,23 +825,31 @@ testdb=&gt;
       </varlistentry>
 
       <varlistentry>
-        <term><literal>\c</literal> or <literal>\connect</literal> <literal>[ <replaceable class="parameter">dbname</replaceable> [ <replaceable class="parameter">username</replaceable> ] [ <replaceable class="parameter">host</replaceable> ] [ <replaceable class="parameter">port</replaceable> ] ]</literal></term>
+        <term><literal>\c</literal> or <literal>\connect</literal> <literal>[ <replaceable class="parameter">dbname</replaceable> [ <replaceable class="parameter">username</replaceable> ] [ <replaceable class="parameter">host</replaceable> ] [ <replaceable class="parameter">port</replaceable> ] ] | <replaceable class="parameter">conninfo</replaceable> </literal></term>
         <listitem>
         <para>
         Establishes a new connection to a <productname>PostgreSQL</>
-        server. If the new connection is successfully made, the
-        previous connection is closed. If any of <replaceable
-        class="parameter">dbname</replaceable>, <replaceable
-        class="parameter">username</replaceable>, <replaceable
-        class="parameter">host</replaceable> or <replaceable
-        class="parameter">port</replaceable> are omitted or specified
-        as <literal>-</literal>, the value of that parameter from the
-        previous connection is used. If there is no previous
-        connection, the <application>libpq</application> default for
-        the parameter's value is used.
+        server.  The connection parameters to use can be specified either
+        using a positional syntax, or using <literal>conninfo</> connection
+        strings as detailed in <xref linkend="libpq-connstring">.
+        </para>
+
+        <para>
+        When using positional parameters, if any of
+        <replaceable class="parameter">dbname</replaceable>,
+        <replaceable class="parameter">username</replaceable>,
+        <replaceable class="parameter">host</replaceable> or
+        <replaceable class="parameter">port</replaceable> are omitted or
+        specified as <literal>-</literal>, the value of that parameter from
+        the previous connection is used; if there is no previous connection,
+        the <application>libpq</application> default for the parameter's value
+        is used.  When using <literal>conninfo</> strings, no values from the
+        previous connection are used for the new connection.
         </para>
 
         <para>
+        If the new connection is successfully made, the previous
+        connection is closed.
         If the connection attempt failed (wrong user name, access
         denied, etc.), the previous connection will only be kept if
         <application>psql</application> is in interactive mode. When
@@ -822,6 +859,16 @@ testdb=&gt;
         mechanism that scripts are not accidentally acting on the
         wrong database on the other hand.
         </para>
+
+        <para>
+        Examples:
+        </para>
+<programlisting>
+=&gt; \c mydb myuser host.dom 6432
+=&gt; \c service=foo
+=&gt; \c "host=localhost port=5432 dbname=mydb connect_timeout=10 sslmode=disable"
+=&gt; \c postgresql://tom@localhost/mydb?application_name=myapp
+</programlisting>
         </listitem>
       </varlistentry>
 
@@ -1632,6 +1679,32 @@ Tue Oct 26 21:40:57 CEST 1999
       </varlistentry>
 
 
+      <varlistentry>
+        <term><literal>\ev <optional> <replaceable class="parameter">view_name</> <optional>  <replaceable class="parameter">line_number</> </optional> </optional> </literal></term>
+
+        <listitem>
+        <para>
+         This command fetches and edits the definition of the named view,
+         in the form of a <command>CREATE OR REPLACE VIEW</> command.
+         Editing is done in the same way as for <literal>\edit</>.
+         After the editor exits, the updated command waits in the query buffer;
+         type semicolon or <literal>\g</> to send it, or <literal>\r</>
+         to cancel.
+        </para>
+
+        <para>
+         If no view is specified, a blank <command>CREATE VIEW</>
+         template is presented for editing.
+        </para>
+
+        <para>
+         If a line number is specified, <application>psql</application> will
+         position the cursor on the specified line of the view definition.
+        </para>
+        </listitem>
+      </varlistentry>
+
+
       <varlistentry>
         <term><literal>\encoding [ <replaceable class="parameter">encoding</replaceable> ]</literal></term>
 
@@ -1644,6 +1717,20 @@ Tue Oct 26 21:40:57 CEST 1999
       </varlistentry>
 
 
+      <varlistentry>
+        <term><literal>\errverbose</literal></term>
+
+        <listitem>
+        <para>
+        Repeats the most recent server error message at maximum
+        verbosity, as though <varname>VERBOSITY</varname> were set
+        to <literal>verbose</> and <varname>SHOW_CONTEXT</varname> were
+        set to <literal>always</>.
+        </para>
+        </listitem>
+      </varlistentry>
+
+
       <varlistentry>
         <term><literal>\f [ <replaceable class="parameter">string</replaceable> ]</literal></term>
 
@@ -1679,6 +1766,49 @@ Tue Oct 26 21:40:57 CEST 1999
         </listitem>
       </varlistentry>
 
+
+      <varlistentry>
+        <term><literal>\gexec</literal></term>
+
+        <listitem>
+        <para>
+         Sends the current query input buffer to the server, then treats
+         each column of each row of the query's output (if any) as a SQL
+         statement to be executed.  For example, to create an index on each
+         column of <structname>my_table</>:
+<programlisting>
+=&gt; <userinput>SELECT format('create index on my_table(%I)', attname)</>
+-&gt; <userinput>FROM pg_attribute</>
+-&gt; <userinput>WHERE attrelid = 'my_table'::regclass AND attnum &gt; 0</>
+-&gt; <userinput>ORDER BY attnum</>
+-&gt; <userinput>\gexec</>
+CREATE INDEX
+CREATE INDEX
+CREATE INDEX
+CREATE INDEX
+</programlisting>
+        </para>
+
+        <para>
+         The generated queries are executed in the order in which the rows
+         are returned, and left-to-right within each row if there is more
+         than one column.  NULL fields are ignored.  The generated queries
+         are sent literally to the server for processing, so they cannot be
+         <application>psql</> meta-commands nor contain <application>psql</>
+         variable references.  If any individual query fails, execution of
+         the remaining queries continues
+         unless <varname>ON_ERROR_STOP</varname> is set.  Execution of each
+         query is subject to <varname>ECHO</varname> processing.
+         (Setting <varname>ECHO</varname> to <literal>all</literal>
+         or <literal>queries</literal> is often advisable when
+         using <command>\gexec</>.)  Query logging, single-step mode,
+         timing, and other query execution features apply to each generated
+         query as well.
+        </para>
+        </listitem>
+      </varlistentry>
+
+
       <varlistentry>
         <term><literal>\gset [ <replaceable class="parameter">prefix</replaceable> ]</literal></term>
 
@@ -1765,6 +1895,13 @@ hello 10
         class="parameter">filename</replaceable> and executes it as
         though it had been typed on the keyboard.
         </para>
+        <para>
+        If <replaceable>filename</replaceable> is <literal>-</literal>
+        (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 that Readline behavior
+        will be used only if it is active at the outermost level.
+        </para>
         <note>
         <para>
         If you want to see the lines on the screen as they are read you
@@ -1994,14 +2131,15 @@ lo_import 152801
           The <replaceable class="parameter">value</replaceable> must be a
           number. In general, the higher
           the number the more borders and lines the tables will have,
-          but this depends on the particular format. In
-          <acronym>HTML</acronym> format, this will translate directly
-          into the <literal>border=...</literal> attribute; in
-          <literal>latex</literal> and <literal>latex-longtable</literal>
-          formats, a value of 3 will add a dividing line between each row; in
-          the other formats only values 0 (no border), 1 (internal dividing
-          lines), and 2 (table frame) make sense and values above 2 will be
-          treated the same as <literal>border = 2</literal>.
+          but details depend on the particular format.
+          In <acronym>HTML</acronym> format, this will translate directly
+          into the <literal>border=...</literal> attribute.
+          In most other formats only values 0 (no border), 1 (internal
+          dividing lines), and 2 (table frame) make sense, and values above 2
+          will be treated the same as <literal>border = 2</literal>.
+          The <literal>latex</literal> and <literal>latex-longtable</literal>
+          formats additionally allow a value of 3 to add dividing lines
+          between data rows.
           </para>
           </listitem>
           </varlistentry>
@@ -2038,8 +2176,9 @@ lo_import 152801
           column name on the left and the data on the right. This mode is
           useful if the data wouldn't fit on the screen in the
           normal <quote>horizontal</quote> mode.  In the auto setting, the
-          expanded mode is used whenever the query output is wider than the
-          screen, otherwise the regular mode is used.  The auto setting is only
+          expanded mode is used whenever the query output has more than one
+          column and is wider than the screen; otherwise, the regular mode is
+          used.  The auto setting is only
           effective in the aligned and wrapped formats.  In other formats, it
           always behaves as if the expanded mode is off.
           </para>
@@ -2090,7 +2229,7 @@ lo_import 152801
           <para>
           Sets the output format to one of <literal>unaligned</literal>,
           <literal>aligned</literal>, <literal>wrapped</literal>,
-          <literal>html</literal>,
+          <literal>html</literal>, <literal>asciidoc</literal>,
           <literal>latex</literal> (uses <literal>tabular</literal>),
           <literal>latex-longtable</literal>, or
           <literal>troff-ms</literal>.
@@ -2119,7 +2258,7 @@ lo_import 152801
           </para>
 
           <para>
-          The <literal>html</>, <literal>latex</>,
+          The <literal>html</>, <literal>asciidoc</>, <literal>latex</>,
           <literal>latex-longtable</literal>, and <literal>troff-ms</>
           formats put out tables that are intended to
           be included in documents using the respective mark-up
@@ -2138,7 +2277,7 @@ lo_import 152801
           <listitem>
           <para>
           Sets the border line drawing style to one
-          of <literal>ascii</literal>, <literal>old-ascii</literal>
+          of <literal>ascii</literal>, <literal>old-ascii</literal>,
           or <literal>unicode</literal>.
           Unique abbreviations are allowed.  (That would mean one
           letter is enough.)
@@ -2176,8 +2315,8 @@ lo_import 152801
 
           <para>
           When the <literal>border</> setting is greater than zero,
-          this option also determines the characters
-          with which the border lines are drawn.
+          the <literal>linestyle</literal> option also determines the
+          characters with which the border lines are drawn.
           Plain <acronym>ASCII</acronym> characters work everywhere, but
           Unicode characters look nicer on displays that recognize them.
           </para>
@@ -2235,6 +2374,18 @@ lo_import 152801
           </listitem>
           </varlistentry>
 
+          <varlistentry>
+          <term><literal>pager_min_lines</literal></term>
+          <listitem>
+          <para>
+          If <literal>pager_min_lines</> is set to a number greater than the
+          page height, the pager program will not be called unless there are
+          at least this many lines of output to show. The default setting
+          is 0.
+          </para>
+          </listitem>
+          </varlistentry>
+
           <varlistentry>
           <term><literal>recordsep</literal></term>
           <listitem>
@@ -2280,7 +2431,7 @@ lo_import 152801
           </varlistentry>
 
           <varlistentry>
-          <term><literal>title</literal></term>
+          <term><literal>title</literal> (or <literal>C</literal>)</term>
           <listitem>
           <para>
           Sets the table title for any subsequently printed tables. This
@@ -2308,31 +2459,34 @@ lo_import 152801
           </varlistentry>
 
           <varlistentry>
-          <term><literal>unicode_border_style</literal></term>
+          <term><literal>unicode_border_linestyle</literal></term>
           <listitem>
           <para>
-          Sets the border drawing style for the unicode linestyle to one
-          of <literal>single</literal> or <literal>double</literal>.
+          Sets the border drawing style for the <literal>unicode</literal>
+          line style to one of <literal>single</literal>
+          or <literal>double</literal>.
           </para>
           </listitem>
           </varlistentry>
 
           <varlistentry>
-          <term><literal>unicode_column_style</literal></term>
+          <term><literal>unicode_column_linestyle</literal></term>
           <listitem>
           <para>
-          Sets the column drawing style for the unicode linestyle to one
-          of <literal>single</literal> or <literal>double</literal>.
+          Sets the column drawing style for the <literal>unicode</literal>
+          line style to one of <literal>single</literal>
+          or <literal>double</literal>.
           </para>
           </listitem>
           </varlistentry>
 
           <varlistentry>
-          <term><literal>unicode_header_style</literal></term>
+          <term><literal>unicode_header_linestyle</literal></term>
           <listitem>
           <para>
-          Sets the header drawing style for the unicode linestyle to one
-          of <literal>single</literal> or <literal>double</literal>.
+          Sets the header drawing style for the <literal>unicode</literal>
+          line style to one of <literal>single</literal>
+          or <literal>double</literal>.
           </para>
           </listitem>
           </varlistentry>
@@ -2491,6 +2645,25 @@ testdb=&gt; <userinput>\setenv LESS -imx4F</userinput>
       </varlistentry>
 
 
+      <varlistentry>
+        <term><literal>\sv[+] <replaceable class="parameter">view_name</> </literal></term>
+
+        <listitem>
+         <para>
+          This command fetches and shows the definition of the named view,
+          in the form of a <command>CREATE OR REPLACE VIEW</> command.
+          The definition is printed to the current query output channel,
+          as set by <command>\o</command>.
+         </para>
+
+         <para>
+          If <literal>+</literal> is appended to the command name, then the
+          output lines are numbered from 1.
+         </para>
+        </listitem>
+      </varlistentry>
+
+
       <varlistentry>
         <term><literal>\t</literal></term>
         <listitem>
@@ -2557,9 +2730,11 @@ testdb=&gt; <userinput>\setenv LESS -imx4F</userinput>
         <term><literal>\watch [ <replaceable class="parameter">seconds</replaceable> ]</literal></term>
         <listitem>
         <para>
-        Repeatedly execute the current query buffer (like <literal>\g</>)
+        Repeatedly execute the current query buffer (as <literal>\g</> does)
         until interrupted or the query fails.  Wait the specified number of
-        seconds (default 2) between executions.
+        seconds (default 2) between executions.  Each query result is
+        displayed with a header that includes the <literal>\pset title</>
+        string (if any), the time as of query start, and the delay interval.
         </para>
         </listitem>
       </varlistentry>
@@ -2615,11 +2790,11 @@ testdb=&gt; <userinput>\setenv LESS -imx4F</userinput>
         <para>
         Shows help information. The optional
         <replaceable class="parameter">topic</> parameter
-        (defaulting to <literal>commands</>) selects which part of psql is
+        (defaulting to <literal>commands</>) selects which part of <application>psql</application> is
         explained: <literal>commands</> describes <application>psql</>'s
-        backslash commands; <literal>options</> describes the commandline
-        switches that can be passed to <application>psql</>;
-        and <literal>variables</> shows help about about psql configuration
+        backslash commands; <literal>options</> describes the command-line
+        options that can be passed to <application>psql</>;
+        and <literal>variables</> shows help about <application>psql</application> configuration
         variables.
         </para>
         </listitem>
@@ -3115,6 +3290,23 @@ bar
         </listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><varname>SHOW_CONTEXT</varname></term>
+        <listitem>
+        <para>
+        This variable can be set to the
+        values <literal>never</>, <literal>errors</>, or <literal>always</>
+        to control whether <literal>CONTEXT</> fields are displayed in
+        messages from the server. The default is <literal>errors</> (meaning
+        that context will be shown in error messages, but not in notice or
+        warning messages).  This setting has no effect
+        when <varname>VERBOSITY</> is set to <literal>terse</>.
+        (See also <command>\errverbose</>, for use when you want a verbose
+        version of the error you just got.)
+        </para>
+        </listitem>
+      </varlistentry>
+
       <varlistentry>
         <term><varname>SINGLELINE</varname></term>
         <listitem>
@@ -3153,6 +3345,8 @@ bar
         This variable can be set to the values <literal>default</>,
         <literal>verbose</>, or <literal>terse</> to control the verbosity
         of error reports.
+        (See also <command>\errverbose</>, for use when you want a verbose
+        version of the error you just got.)
         </para>
         </listitem>
       </varlistentry>
@@ -3289,6 +3483,13 @@ testdb=&gt; <userinput>INSERT INTO my_table VALUES (:'content');</userinput>
         </listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><literal>%p</literal></term>
+        <listitem>
+         <para>The process ID of the backend currently connected to.</para>
+        </listitem>
+      </varlistentry>
+
       <varlistentry>
         <term><literal>%&gt;</literal></term>
         <listitem><para>The port number at which the database server is listening.</para></listitem>
@@ -3524,9 +3725,10 @@ $endif
 
     <listitem>
      <para>
-      Editor used by the <command>\e</command> and
-      <command>\ef</command> commands.  The variables are examined in
-      the order listed; the first that is set is used.
+      Editor used by the <command>\e</command>, <command>\ef</command>,
+      and <command>\ev</command> commands.
+      These variables are examined in the order listed;
+      the first that is set is used.
      </para>
 
      <para>
@@ -3541,7 +3743,8 @@ $endif
 
     <listitem>
      <para>
-      When <command>\e</command> or <command>\ef</command> is used
+      When <command>\e</command>, <command>\ef</command>, or
+      <command>\ev</command> is used
       with a line number argument, this variable specifies the
       command-line argument used to pass the starting line number to
       the user's editor.  For editors such as <productname>Emacs</> or
@@ -3622,7 +3825,7 @@ PSQL_EDITOR_LINENUMBER_ARG='--line '
    <term><filename>psqlrc</filename> and <filename>~/.psqlrc</filename></term>
    <listitem>
     <para>
-     Unless it is passed an <option>-X</option> or <option>-c</option> option,
+     Unless it is passed an <option>-X</option> option,
      <application>psql</application> attempts to read and execute commands
      from the system-wide startup file (<filename>psqlrc</filename>) and then
      the user's personal startup file (<filename>~/.psqlrc</filename>), after
@@ -3684,16 +3887,6 @@ PSQL_EDITOR_LINENUMBER_ARG='--line '
   <title>Notes</title>
 
     <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>
       <para><application>psql</application> works best with servers of the same
        or an older major version.  Backslash commands are particularly likely
@@ -3709,13 +3902,30 @@ PSQL_EDITOR_LINENUMBER_ARG='--line '
        If you want to use <application>psql</application> to connect to several
        servers of different major versions, it is recommended that you use the
        newest version of <application>psql</application>.  Alternatively, you
-       can keep a copy of <application>psql</application> from each major
-       version around and be sure to use the version that matches the
+       can keep around a copy of <application>psql</application> from each
+       major version and be sure to use the version that matches the
        respective server.  But in practice, this additional complication should
        not be necessary.
       </para>
       </listitem>
 
+      <listitem>
+      <para>
+       Before <productname>PostgreSQL</productname> 9.6,
+       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>
+      </listitem>
     </itemizedlist>
  </refsect1>