Update autovacuum to use reloptions instead of a system catalog, for
[PostgreSQL.git] / doc / src / sgml / ref / psql-ref.sgml
blobcf25d78b19f24ef7cbfd8de2a5e5069984d18f95
1 <!--
2 $PostgreSQL$
3 PostgreSQL documentation
4 -->
6 <refentry id="APP-PSQL">
7 <refmeta>
8 <refentrytitle id="app-psql-title"><application>psql</application></refentrytitle>
9 <manvolnum>1</manvolnum>
10 <refmiscinfo>Application</refmiscinfo>
11 </refmeta>
13 <refnamediv>
14 <refname><application>psql</application></refname>
15 <refpurpose>
16 <productname>PostgreSQL</productname> interactive terminal
17 </refpurpose>
18 </refnamediv>
20 <indexterm zone="app-psql">
21 <primary>psql</primary>
22 </indexterm>
24 <refsynopsisdiv>
25 <cmdsynopsis>
26 <command>psql</command>
27 <arg rep="repeat"><replaceable class="parameter">option</replaceable></arg>
28 <arg><replaceable class="parameter">dbname</replaceable>
29 <arg><replaceable class="parameter">username</replaceable></arg></arg>
30 </cmdsynopsis>
31 </refsynopsisdiv>
33 <refsect1>
34 <title>Description</title>
36 <para>
37 <application>psql</application> is a terminal-based front-end to
38 <productname>PostgreSQL</productname>. It enables you to type in
39 queries interactively, issue them to
40 <productname>PostgreSQL</productname>, and see the query results.
41 Alternatively, input can be from a file. In addition, it provides a
42 number of meta-commands and various shell-like features to
43 facilitate writing scripts and automating a wide variety of tasks.
44 </para>
45 </refsect1>
47 <refsect1 id="R1-APP-PSQL-3">
48 <title>Options</title>
50 <variablelist>
51 <varlistentry>
52 <term><option>-a</></term>
53 <term><option>--echo-all</></term>
54 <listitem>
55 <para>
56 Print all input lines to standard output as they are read. This is more
57 useful for script processing rather than interactive mode. This is
58 equivalent to setting the variable <varname>ECHO</varname> to
59 <literal>all</literal>.
60 </para>
61 </listitem>
62 </varlistentry>
64 <varlistentry>
65 <term><option>-A</></term>
66 <term><option>--no-align</></term>
67 <listitem>
68 <para>
69 Switches to unaligned output mode. (The default output mode is
70 otherwise aligned.)
71 </para>
72 </listitem>
73 </varlistentry>
75 <varlistentry>
76 <term><option>-c <replaceable class="parameter">command</replaceable></></term>
77 <term><option>--command <replaceable class="parameter">command</replaceable></></term>
78 <listitem>
79 <para>
80 Specifies that <application>psql</application> is to execute one
81 command string, <replaceable class="parameter">command</replaceable>,
82 and then exit. This is useful in shell scripts.
83 </para>
84 <para>
85 <replaceable class="parameter">command</replaceable> must be either
86 a command string that is completely parsable by the server (i.e.,
87 it contains no <application>psql</application> specific features),
88 or a single backslash command. Thus you cannot mix
89 <acronym>SQL</acronym> and <application>psql</application>
90 meta-commands with this option. To achieve that, you could
91 pipe the string into <application>psql</application>, like
92 this: <literal>echo '\x \\ SELECT * FROM foo;' | psql</literal>.
93 (<literal>\\</> is the separator meta-command.)
94 </para>
95 <para>
96 If the command string contains multiple SQL commands, they are
97 processed in a single transaction, unless there are explicit
98 <command>BEGIN</>/<command>COMMIT</> commands included in the
99 string to divide it into multiple transactions. This is
100 different from the behavior when the same string is fed to
101 <application>psql</application>'s standard input.
102 </para>
103 </listitem>
104 </varlistentry>
106 <varlistentry>
107 <term><option>-d <replaceable class="parameter">dbname</replaceable></></term>
108 <term><option>--dbname <replaceable class="parameter">dbname</replaceable></></term>
109 <listitem>
110 <para>
111 Specifies the name of the database to connect to. This is
112 equivalent to specifying <replaceable
113 class="parameter">dbname</replaceable> as the first non-option
114 argument on the command line.
115 </para>
116 <para>
117 If this parameter contains an <symbol>=</symbol> sign, it is treated as a
118 <parameter>conninfo</parameter> string. See <xref linkend="libpq-connect"> for more information.
119 </para>
120 </listitem>
121 </varlistentry>
123 <varlistentry>
124 <term><option>-e</></term>
125 <term><option>--echo-queries</></term>
126 <listitem>
127 <para>
128 Copy all SQL commands sent to the server to standard output as well.
129 This is equivalent
130 to setting the variable <varname>ECHO</varname> to
131 <literal>queries</literal>.
132 </para>
133 </listitem>
134 </varlistentry>
136 <varlistentry>
137 <term><option>-E</></term>
138 <term><option>--echo-hidden</></term>
139 <listitem>
140 <para>
141 Echo the actual queries generated by <command>\d</command> and other backslash
142 commands. You can use this to study <application>psql</application>'s
143 internal operations. This is equivalent to
144 setting the variable <varname>ECHO_HIDDEN</varname> from within
145 <application>psql</application>.
146 </para>
147 </listitem>
148 </varlistentry>
150 <varlistentry>
151 <term><option>-f <replaceable class="parameter">filename</replaceable></></term>
152 <term><option>--file <replaceable class="parameter">filename</replaceable></></term>
153 <listitem>
154 <para>
155 Use the file <replaceable class="parameter">filename</replaceable>
156 as the source of commands instead of reading commands interactively.
157 After the file is processed, <application>psql</application>
158 terminates. This is in many ways equivalent to the internal
159 command <command>\i</command>.
160 </para>
162 <para>
163 If <replaceable>filename</replaceable> is <literal>-</literal>
164 (hyphen), then standard input is read.
165 </para>
167 <para>
168 Using this option is subtly different from writing <literal>psql
169 &lt; <replaceable
170 class="parameter">filename</replaceable></literal>. In general,
171 both will do what you expect, but using <literal>-f</literal>
172 enables some nice features such as error messages with line
173 numbers. There is also a slight chance that using this option will
174 reduce the start-up overhead. On the other hand, the variant using
175 the shell's input redirection is (in theory) guaranteed to yield
176 exactly the same output that you would have gotten had you entered
177 everything by hand.
178 </para>
179 </listitem>
180 </varlistentry>
182 <varlistentry>
183 <term><option>-F <replaceable class="parameter">separator</replaceable></></term>
184 <term><option>--field-separator <replaceable class="parameter">separator</replaceable></></term>
185 <listitem>
186 <para>
187 Use <replaceable class="parameter">separator</replaceable> as the
188 field separator for unaligned output. This is equivalent to
189 <command>\pset fieldsep</command> or <command>\f</command>.
190 </para>
191 </listitem>
192 </varlistentry>
194 <varlistentry>
195 <term><option>-h <replaceable class="parameter">hostname</replaceable></></term>
196 <term><option>--host <replaceable class="parameter">hostname</replaceable></></term>
197 <listitem>
198 <para>
199 Specifies the host name of the machine on which the
200 server is running. If the value begins
201 with a slash, it is used as the directory for the Unix-domain
202 socket.
203 </para>
204 </listitem>
205 </varlistentry>
207 <varlistentry>
208 <term><option>-H</></term>
209 <term><option>--html</></term>
210 <listitem>
211 <para>
212 Turn on <acronym>HTML</acronym> tabular output. This is
213 equivalent to <literal>\pset format html</literal> or the
214 <command>\H</command> command.
215 </para>
216 </listitem>
217 </varlistentry>
219 <varlistentry>
220 <term><option>-l</></term>
221 <term><option>--list</></term>
222 <listitem>
223 <para>
224 List all available databases, then exit. Other non-connection
225 options are ignored. This is similar to the internal command
226 <command>\list</command>.
227 </para>
228 </listitem>
229 </varlistentry>
231 <varlistentry>
232 <term><option>-L <replaceable class="parameter">filename</replaceable></></term>
233 <term><option>--log-file <replaceable class="parameter">filename</replaceable></></term>
234 <listitem>
235 <para>
236 Write all query output into file <replaceable
237 class="parameter">filename</replaceable>, in addition to the
238 normal output destination.
239 </para>
240 </listitem>
241 </varlistentry>
243 <varlistentry>
244 <term><option>-o <replaceable class="parameter">filename</replaceable></></term>
245 <term><option>--output <replaceable class="parameter">filename</replaceable></></term>
246 <listitem>
247 <para>
248 Put all query output into file <replaceable
249 class="parameter">filename</replaceable>. This is equivalent to
250 the command <command>\o</command>.
251 </para>
252 </listitem>
253 </varlistentry>
255 <varlistentry>
256 <term><option>-p <replaceable class="parameter">port</replaceable></></term>
257 <term><option>--port <replaceable class="parameter">port</replaceable></></term>
258 <listitem>
259 <para>
260 Specifies the TCP port or the local Unix-domain
261 socket file extension on which the server is listening for
262 connections. Defaults to the value of the <envar>PGPORT</envar>
263 environment variable or, if not set, to the port specified at
264 compile time, usually 5432.
265 </para>
266 </listitem>
267 </varlistentry>
269 <varlistentry>
270 <term><option>-P <replaceable class="parameter">assignment</replaceable></></term>
271 <term><option>--pset <replaceable class="parameter">assignment</replaceable></></term>
272 <listitem>
273 <para>
274 Allows you to specify printing options in the style of
275 <command>\pset</command> on the command line. Note that here you
276 have to separate name and value with an equal sign instead of a
277 space. Thus to set the output format to LaTeX, you could write
278 <literal>-P format=latex</literal>.
279 </para>
280 </listitem>
281 </varlistentry>
283 <varlistentry>
284 <term><option>-q</></term>
285 <term><option>--quiet</></term>
286 <listitem>
287 <para>
288 Specifies that <application>psql</application> should do its work
289 quietly. By default, it prints welcome messages and various
290 informational output. If this option is used, none of this
291 happens. This is useful with the <option>-c</option> option.
292 Within <application>psql</application> you can also set the
293 <varname>QUIET</varname> variable to achieve the same effect.
294 </para>
295 </listitem>
296 </varlistentry>
298 <varlistentry>
299 <term><option>-R <replaceable class="parameter">separator</replaceable></></term>
300 <term><option>--record-separator <replaceable class="parameter">separator</replaceable></></term>
301 <listitem>
302 <para>
303 Use <replaceable class="parameter">separator</replaceable> as the
304 record separator for unaligned output. This is equivalent to the
305 <command>\pset recordsep</command> command.
306 </para>
307 </listitem>
308 </varlistentry>
310 <varlistentry>
311 <term><option>-s</></term>
312 <term><option>--single-step</></term>
313 <listitem>
314 <para>
315 Run in single-step mode. That means the user is prompted before
316 each command is sent to the server, with the option to cancel
317 execution as well. Use this to debug scripts.
318 </para>
319 </listitem>
320 </varlistentry>
322 <varlistentry>
323 <term><option>-S</></term>
324 <term><option>--single-line</></term>
325 <listitem>
326 <para>
327 Runs in single-line mode where a newline terminates an SQL command, as a
328 semicolon does.
329 </para>
331 <note>
332 <para>
333 This mode is provided for those who insist on it, but you are not
334 necessarily encouraged to use it. In particular, if you mix
335 <acronym>SQL</acronym> and meta-commands on a line the order of
336 execution might not always be clear to the inexperienced user.
337 </para>
338 </note>
339 </listitem>
340 </varlistentry>
342 <varlistentry>
343 <term><option>-t</></term>
344 <term><option>--tuples-only</></term>
345 <listitem>
346 <para>
347 Turn off printing of column names and result row count footers,
348 etc. This is equivalent to the <command>\t</command> command.
349 </para>
350 </listitem>
351 </varlistentry>
353 <varlistentry>
354 <term><option>-T <replaceable class="parameter">table_options</replaceable></></term>
355 <term><option>--table-attr <replaceable class="parameter">table_options</replaceable></></term>
356 <listitem>
357 <para>
358 Allows you to specify options to be placed within the
359 <acronym>HTML</acronym> <sgmltag>table</sgmltag> tag. See
360 <command>\pset</command> for details.
361 </para>
362 </listitem>
363 </varlistentry>
365 <varlistentry>
366 <term><option>-U <replaceable class="parameter">username</replaceable></></term>
367 <term><option>--username <replaceable class="parameter">username</replaceable></></term>
368 <listitem>
369 <para>
370 Connect to the database as the user <replaceable
371 class="parameter">username</replaceable> instead of the default.
372 (You must have permission to do so, of course.)
373 </para>
374 </listitem>
375 </varlistentry>
377 <varlistentry>
378 <term><option>-v <replaceable class="parameter">assignment</replaceable></></term>
379 <term><option>--set <replaceable class="parameter">assignment</replaceable></></term>
380 <term><option>--variable <replaceable class="parameter">assignment</replaceable></></term>
381 <listitem>
382 <para>
383 Perform a variable assignment, like the <command>\set</command>
384 internal command. Note that you must separate name and value, if
385 any, by an equal sign on the command line. To unset a variable,
386 leave off the equal sign. To just set a variable without a value,
387 use the equal sign but leave off the value. These assignments are
388 done during a very early stage of start-up, so variables reserved
389 for internal purposes might get overwritten later.
390 </para>
391 </listitem>
392 </varlistentry>
394 <varlistentry>
395 <term><option>-V</></term>
396 <term><option>--version</></term>
397 <listitem>
398 <para>
399 Print the <application>psql</application> version and exit.
400 </para>
401 </listitem>
402 </varlistentry>
404 <varlistentry>
405 <term><option>-W</></term>
406 <term><option>--password</></term>
407 <listitem>
408 <para>
409 Force <application>psql</application> to prompt for a
410 password before connecting to a database.
411 </para>
413 <para>
414 This option is never essential, since <application>psql</application>
415 will automatically prompt for a password if the server demands
416 password authentication. However, <application>psql</application>
417 will waste a connection attempt finding out that the server wants a
418 password. In some cases it is worth typing <option>-W</> to avoid
419 the extra connection attempt.
420 </para>
422 <para>
423 Note that this option will remain set for the entire session,
424 and so it affects uses of the meta-command
425 <command>\connect</command> as well as the initial connection attempt.
426 </para>
427 </listitem>
428 </varlistentry>
430 <varlistentry>
431 <term><option>-x</></term>
432 <term><option>--expanded</></term>
433 <listitem>
434 <para>
435 Turn on the expanded table formatting mode. This is equivalent to the
436 <command>\x</command> command.
437 </para>
438 </listitem>
439 </varlistentry>
441 <varlistentry>
442 <term><option>-X,</></term>
443 <term><option>--no-psqlrc</></term>
444 <listitem>
445 <para>
446 Do not read the start-up file (neither the system-wide
447 <filename>psqlrc</filename> file nor the user's
448 <filename>~/.psqlrc</filename> file).
449 </para>
450 </listitem>
451 </varlistentry>
453 <varlistentry>
454 <term><option>-1</option></term>
455 <term><option>--single-transaction</option></term>
456 <listitem>
457 <para>
458 When <application>psql</application> executes a script with the
459 <option>-f</> option, adding this option wraps
460 <command>BEGIN</>/<command>COMMIT</> around the script to execute it
461 as a single transaction. This ensures that either all the commands
462 complete successfully, or no changes are applied.
463 </para>
465 <para>
466 If the script itself uses <command>BEGIN</>, <command>COMMIT</>,
467 or <command>ROLLBACK</>, this option will not have the desired
468 effects.
469 Also, if the script contains any command that cannot be executed
470 inside a transaction block, specifying this option will cause that
471 command (and hence the whole transaction) to fail.
472 </para>
473 </listitem>
474 </varlistentry>
476 <varlistentry>
477 <term><option>-?</></term>
478 <term><option>--help</></term>
479 <listitem>
480 <para>
481 Show help about <application>psql</application> command line
482 arguments, and exit.
483 </para>
484 </listitem>
485 </varlistentry>
486 </variablelist>
487 </refsect1>
490 <refsect1>
491 <title>Exit Status</title>
493 <para>
494 <application>psql</application> returns 0 to the shell if it
495 finished normally, 1 if a fatal error of its own (out of memory,
496 file not found) occurs, 2 if the connection to the server went bad
497 and the session was not interactive, and 3 if an error occurred in a
498 script and the variable <varname>ON_ERROR_STOP</varname> was set.
499 </para>
500 </refsect1>
503 <refsect1>
504 <title>Usage</title>
506 <refsect2 id="R2-APP-PSQL-connecting">
507 <title>Connecting To A Database</title>
509 <para>
510 <application>psql</application> is a regular
511 <productname>PostgreSQL</productname> client application. In order
512 to connect to a database you need to know the name of your target
513 database, the host name and port number of the server and what user
514 name you want to connect as. <application>psql</application> can be
515 told about those parameters via command line options, namely
516 <option>-d</option>, <option>-h</option>, <option>-p</option>, and
517 <option>-U</option> respectively. If an argument is found that does
518 not belong to any option it will be interpreted as the database name
519 (or the user name, if the database name is already given). Not all
520 these options are required; there are useful defaults. If you omit the host
521 name, <application>psql</> will connect via a Unix-domain socket
522 to a server on the local host, or via TCP/IP to <literal>localhost</> on
523 machines that don't have Unix-domain sockets. The default port number is
524 determined at compile time.
525 Since the database server uses the same default, you will not have
526 to specify the port in most cases. The default user name is your
527 Unix user name, as is the default database name. Note that you cannot
528 just connect to any database under any user name. Your database
529 administrator should have informed you about your access rights.
530 </para>
532 <para>
533 When the defaults aren't quite right, you can save yourself
534 some typing by setting the environment variables
535 <envar>PGDATABASE</envar>, <envar>PGHOST</envar>,
536 <envar>PGPORT</envar> and/or <envar>PGUSER</envar> to appropriate
537 values. (For additional environment variables, see <xref
538 linkend="libpq-envars">.) It is also convenient to have a
539 <filename>~/.pgpass</> file to avoid regularly having to type in
540 passwords. See <xref linkend="libpq-pgpass"> for more information.
541 </para>
543 <para>
544 An alternative way to specify connection parameters is in a
545 <parameter>conninfo</parameter> string, which is used instead of a
546 database name. This mechanism give you very wide control over the
547 connection. For example:
548 <programlisting>
549 $ <userinput>psql "service=myservice sslmode=require"</userinput>
550 </programlisting>
551 This way you can also use LDAP for connection parameter lookup as
552 described in <xref linkend="libpq-ldap">.
553 See <xref linkend="libpq-connect"> for more information on all the
554 available connection options.
555 </para>
557 <para>
558 If the connection could not be made for any reason (e.g., insufficient
559 privileges, server is not running on the targeted host, etc.),
560 <application>psql</application> will return an error and terminate.
561 </para>
562 </refsect2>
564 <refsect2 id="R2-APP-PSQL-4">
565 <title>Entering SQL Commands</title>
567 <para>
568 In normal operation, <application>psql</application> provides a
569 prompt with the name of the database to which
570 <application>psql</application> is currently connected, followed by
571 the string <literal>=&gt;</literal>. For example:
572 <programlisting>
573 $ <userinput>psql testdb</userinput>
574 psql (&version;)
575 Type "help" for help.
577 testdb=&gt;
578 </programlisting>
579 </para>
581 <para>
582 At the prompt, the user can type in <acronym>SQL</acronym> commands.
583 Ordinarily, input lines are sent to the server when a
584 command-terminating semicolon is reached. An end of line does not
585 terminate a command. Thus commands can be spread over several lines for
586 clarity. If the command was sent and executed without error, the results
587 of the command are displayed on the screen.
588 </para>
590 <para>
591 Whenever a command is executed, <application>psql</application> also polls
592 for asynchronous notification events generated by
593 <xref linkend="SQL-LISTEN" endterm="SQL-LISTEN-title"> and
594 <xref linkend="SQL-NOTIFY" endterm="SQL-NOTIFY-title">.
595 </para>
596 </refsect2>
598 <refsect2>
599 <title>Meta-Commands</title>
601 <para>
602 Anything you enter in <application>psql</application> that begins
603 with an unquoted backslash is a <application>psql</application>
604 meta-command that is processed by <application>psql</application>
605 itself. These commands help make
606 <application>psql</application> more useful for administration or
607 scripting. Meta-commands are more commonly called slash or backslash
608 commands.
609 </para>
611 <para>
612 The format of a <application>psql</application> command is the backslash,
613 followed immediately by a command verb, then any arguments. The arguments
614 are separated from the command verb and each other by any number of
615 whitespace characters.
616 </para>
618 <para>
619 To include whitespace into an argument you can quote it with a
620 single quote. To include a single quote into such an argument,
621 use two single quotes. Anything contained in single quotes is
622 furthermore subject to C-like substitutions for
623 <literal>\n</literal> (new line), <literal>\t</literal> (tab),
624 <literal>\</literal><replaceable>digits</replaceable> (octal), and
625 <literal>\x</literal><replaceable>digits</replaceable> (hexadecimal).
626 </para>
628 <para>
629 If an unquoted argument begins with a colon (<literal>:</literal>),
630 it is taken as a <application>psql</> variable and the value of the
631 variable is used as the argument instead.
632 </para>
634 <para>
635 Arguments that are enclosed in backquotes (<literal>`</literal>)
636 are taken as a command line that is passed to the shell. The
637 output of the command (with any trailing newline removed) is taken
638 as the argument value. The above escape sequences also apply in
639 backquotes.
640 </para>
642 <para>
643 Some commands take an <acronym>SQL</acronym> identifier (such as a
644 table name) as argument. These arguments follow the syntax rules
645 of <acronym>SQL</acronym>: Unquoted letters are forced to
646 lowercase, while double quotes (<literal>"</>) protect letters
647 from case conversion and allow incorporation of whitespace into
648 the identifier. Within double quotes, paired double quotes reduce
649 to a single double quote in the resulting name. For example,
650 <literal>FOO"BAR"BAZ</> is interpreted as <literal>fooBARbaz</>,
651 and <literal>"A weird"" name"</> becomes <literal>A weird"
652 name</>.
653 </para>
655 <para>
656 Parsing for arguments stops when another unquoted backslash occurs.
657 This is taken as the beginning of a new meta-command. The special
658 sequence <literal>\\</literal> (two backslashes) marks the end of
659 arguments and continues parsing <acronym>SQL</acronym> commands, if
660 any. That way <acronym>SQL</acronym> and
661 <application>psql</application> commands can be freely mixed on a
662 line. But in any case, the arguments of a meta-command cannot
663 continue beyond the end of the line.
664 </para>
666 <para>
667 The following meta-commands are defined:
669 <variablelist>
670 <varlistentry>
671 <term><literal>\a</literal></term>
672 <listitem>
673 <para>
674 If the current table output format is unaligned, it is switched to aligned.
675 If it is not unaligned, it is set to unaligned. This command is
676 kept for backwards compatibility. See <command>\pset</command> for a
677 more general solution.
678 </para>
679 </listitem>
680 </varlistentry>
682 <varlistentry>
683 <term><literal>\cd [ <replaceable>directory</replaceable> ]</literal></term>
684 <listitem>
685 <para>
686 Changes the current working directory to
687 <replaceable>directory</replaceable>. Without argument, changes
688 to the current user's home directory.
689 </para>
691 <tip>
692 <para>
693 To print your current working directory, use <literal>\!pwd</literal>.
694 </para>
695 </tip>
696 </listitem>
697 </varlistentry>
699 <varlistentry>
700 <term><literal>\C [ <replaceable class="parameter">title</replaceable> ]</literal></term>
701 <listitem>
702 <para>
703 Sets the title of any tables being printed as the result of a
704 query or unset any such title. This command is equivalent to
705 <literal>\pset title <replaceable
706 class="parameter">title</replaceable></literal>. (The name of
707 this command derives from <quote>caption</quote>, as it was
708 previously only used to set the caption in an
709 <acronym>HTML</acronym> table.)
710 </para>
711 </listitem>
712 </varlistentry>
714 <varlistentry>
715 <term><literal>\connect</literal> (or <literal>\c</literal>) <literal>[ <replaceable class="parameter">dbname</replaceable> [ <replaceable class="parameter">username</replaceable> ] [ <replaceable class="parameter">host</replaceable> ] [ <replaceable class="parameter">port</replaceable> ] ]</literal></term>
716 <listitem>
717 <para>
718 Establishes a new connection to a <productname>PostgreSQL</>
719 server. If the new connection is successfully made, the
720 previous connection is closed. If any of <replaceable
721 class="parameter">dbname</replaceable>, <replaceable
722 class="parameter">username</replaceable>, <replaceable
723 class="parameter">host</replaceable> or <replaceable
724 class="parameter">port</replaceable> are omitted or specified
725 as <literal>-</literal>, the value of that parameter from the
726 previous connection is used. If there is no previous
727 connection, the <application>libpq</application> default for
728 the parameter's value is used.
729 </para>
731 <para>
732 If the connection attempt failed (wrong user name, access
733 denied, etc.), the previous connection will only be kept if
734 <application>psql</application> is in interactive mode. When
735 executing a non-interactive script, processing will
736 immediately stop with an error. This distinction was chosen as
737 a user convenience against typos on the one hand, and a safety
738 mechanism that scripts are not accidentally acting on the
739 wrong database on the other hand.
740 </para>
741 </listitem>
742 </varlistentry>
744 <varlistentry>
745 <term><literal>\copy { <replaceable class="parameter">table</replaceable> [ ( <replaceable class="parameter">column_list</replaceable> ) ] | ( <replaceable class="parameter">query</replaceable> ) }
746 { <literal>from</literal> | <literal>to</literal> }
747 { <replaceable class="parameter">filename</replaceable> | stdin | stdout | pstdin | pstdout }
748 [ with ]
749 [ binary ]
750 [ oids ]
751 [ delimiter [ as ] '<replaceable class="parameter">character</replaceable>' ]
752 [ null [ as ] '<replaceable class="parameter">string</replaceable>' ]
753 [ csv
754 [ header ]
755 [ quote [ as ] '<replaceable class="parameter">character</replaceable>' ]
756 [ escape [ as ] '<replaceable class="parameter">character</replaceable>' ]
757 [ force quote <replaceable class="parameter">column_list</replaceable> ]
758 [ force not null <replaceable class="parameter">column_list</replaceable> ] ]</literal>
759 </term>
761 <listitem>
762 <para>
763 Performs a frontend (client) copy. This is an operation that
764 runs an <acronym>SQL</acronym> <xref linkend="SQL-COPY"
765 endterm="SQL-COPY-title"> command, but instead of the server
766 reading or writing the specified file,
767 <application>psql</application> reads or writes the file and
768 routes the data between the server and the local file system.
769 This means that file accessibility and privileges are those of
770 the local user, not the server, and no SQL superuser
771 privileges are required.
772 </para>
774 <para>
775 The syntax of the command is similar to that of the
776 <acronym>SQL</acronym> <xref linkend="sql-copy"
777 endterm="sql-copy-title"> command. Note that, because of this,
778 special parsing rules apply to the <command>\copy</command>
779 command. In particular, the variable substitution rules and
780 backslash escapes do not apply.
781 </para>
783 <para>
784 <literal>\copy ... from stdin | to stdout</literal>
785 reads/writes based on the command input and output respectively.
786 All rows are read from the same source that issued the command,
787 continuing until <literal>\.</literal> is read or the stream
788 reaches <acronym>EOF</>. Output is sent to the same place as
789 command output. To read/write from
790 <application>psql</application>'s standard input or output, use
791 <literal>pstdin</> or <literal>pstdout</>. This option is useful
792 for populating tables in-line within a SQL script file.
793 </para>
795 <tip>
796 <para>
797 This operation is not as efficient as the <acronym>SQL</acronym>
798 <command>COPY</command> command because all data must pass
799 through the client/server connection. For large
800 amounts of data the <acronym>SQL</acronym> command might be preferable.
801 </para>
802 </tip>
804 </listitem>
805 </varlistentry>
807 <varlistentry>
808 <term><literal>\copyright</literal></term>
809 <listitem>
810 <para>
811 Shows the copyright and distribution terms of
812 <productname>PostgreSQL</productname>.
813 </para>
814 </listitem>
815 </varlistentry>
817 <varlistentry>
818 <term><literal>\d[S+] [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
820 <listitem>
821 <para>
822 For each relation (table, view, index, or sequence) matching the
823 <replaceable class="parameter">pattern</replaceable>, show all
824 columns, their types, the tablespace (if not the default) and any special
825 attributes such as <literal>NOT NULL</literal> or defaults, if
826 any. Associated indexes, constraints, rules, and triggers are
827 also shown, as is the view definition if the relation is a view.
828 (<quote>Matching the pattern</> is defined below.)
829 </para>
831 <para>
832 The command form <literal>\d+</literal> is identical, except that
833 more information is displayed: any comments associated with the
834 columns of the table are shown, as is the presence of OIDs in the
835 table.
836 The letter <literal>S</literal> adds the listing of system
837 objects; without <literal>S</literal>, only non-system
838 objects are shown.
839 </para>
841 <note>
842 <para>
843 If <command>\d</command> is used without a
844 <replaceable class="parameter">pattern</replaceable> argument, it is
845 equivalent to <command>\dtvs</command> which will show a list of
846 all tables, views, and sequences. This is purely a convenience
847 measure.
848 </para>
849 </note>
850 </listitem>
851 </varlistentry>
853 <varlistentry>
854 <term><literal>\da[S] [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
856 <listitem>
857 <para>
858 Lists all available aggregate functions, together with their
859 return type and the data types they operate on. If <replaceable
860 class="parameter">pattern</replaceable>
861 is specified, only aggregates whose names match the pattern are shown.
862 The letter <literal>S</literal> adds the listing of system
863 objects; without <literal>S</literal>, only non-system
864 objects are shown.
865 </para>
866 </listitem>
867 </varlistentry>
870 <varlistentry>
871 <term><literal>\db[+] [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
873 <listitem>
874 <para>
875 Lists all available tablespaces. If <replaceable
876 class="parameter">pattern</replaceable>
877 is specified, only tablespaces whose names match the pattern are shown.
878 If <literal>+</literal> is appended to the command name, each object
879 is listed with its associated permissions.
880 </para>
881 </listitem>
882 </varlistentry>
885 <varlistentry>
886 <term><literal>\dc[S] [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
887 <listitem>
888 <para>
889 Lists all available conversions between character-set encodings.
890 If <replaceable class="parameter">pattern</replaceable>
891 is specified, only conversions whose names match the pattern are
892 listed.
893 The letter <literal>S</literal> adds the listing of system
894 objects; without <literal>S</literal>, only non-system
895 objects are shown.
896 </para>
897 </listitem>
898 </varlistentry>
901 <varlistentry>
902 <term><literal>\dC [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
903 <listitem>
904 <para>
905 Lists all available type casts.
906 If <replaceable class="parameter">pattern</replaceable>
907 is specified, only casts whose source or target types match the
908 pattern are listed.
909 </para>
910 </listitem>
911 </varlistentry>
914 <varlistentry>
915 <term><literal>\dd[S] [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
916 <listitem>
917 <para>
918 Shows the descriptions of objects matching the <replaceable
919 class="parameter">pattern</replaceable>, or of all visible objects if
920 no argument is given. But in either case, only objects that have
921 a description are listed.
922 The letter <literal>S</literal> adds the listing of system
923 objects; without <literal>S</literal>, only non-system
924 objects are shown.
925 (<quote>Object</quote> covers aggregates, functions, operators,
926 types, relations (tables, views, indexes, sequences, large
927 objects), rules, and triggers.) For example:
928 <programlisting>
929 =&gt; <userinput>\dd version</userinput>
930 Object descriptions
931 Schema | Name | Object | Description
932 ------------+---------+----------+---------------------------
933 pg_catalog | version | function | PostgreSQL version string
934 (1 row)
935 </programlisting>
936 </para>
938 <para>
939 Descriptions for objects can be created with the <xref
940 linkend="sql-comment" endterm="sql-comment-title">
941 <acronym>SQL</acronym> command.
942 </para>
943 </listitem>
944 </varlistentry>
947 <varlistentry>
948 <term><literal>\dD[S] [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
949 <listitem>
950 <para>
951 Lists all available domains. If <replaceable
952 class="parameter">pattern</replaceable>
953 is specified, only matching domains are shown.
954 The letter <literal>S</literal> adds the listing of system
955 objects; without <literal>S</literal>, only non-system
956 objects are shown.
957 </para>
958 </listitem>
959 </varlistentry>
962 <varlistentry>
963 <term><literal>\des[+] [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
964 <listitem>
965 <para>
966 Lists all foreign servers (mnemonic: <quote>external
967 servers</quote>).
968 If <replaceable class="parameter">pattern</replaceable> is
969 specified, only those servers whose name matches the pattern
970 are listed. If the form <literal>\des+</literal> is used, a
971 full desription of each server is shown, including the
972 server's ACL, type, version, and options.
973 </para>
974 </listitem>
975 </varlistentry>
978 <varlistentry>
979 <term><literal>\deu[+] [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
980 <listitem>
981 <para>
982 Lists all user mappings (mnemonic: <quote>external
983 users</quote>).
984 If <replaceable class="parameter">pattern</replaceable> is
985 specified, only those mappings whose user names match the
986 pattern are listed. If the form <literal>\deu+</literal> is
987 used, additional information about each mapping is shown.
988 </para>
990 <caution>
991 <para>
992 <literal>\deu+</literal> might also display the user name and
993 password of the remote user, so care should be taken not to
994 disclose them.
995 </para>
996 </caution>
997 </listitem>
998 </varlistentry>
1001 <varlistentry>
1002 <term><literal>\dew[+] [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
1003 <listitem>
1004 <para>
1005 Lists all foreign-data wrappers (mnemonic: <quote>external
1006 wrappers</quote>).
1007 If <replaceable class="parameter">pattern</replaceable> is
1008 specified, only those foreign-data wrappers whose name matches
1009 the pattern are listed. If the form <literal>\dew+</literal>
1010 is used, the ACL and options of the foreign-data wrapper are
1011 also shown.
1012 </para>
1013 </listitem>
1014 </varlistentry>
1017 <varlistentry>
1018 <term><literal>\df[S+] [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
1020 <listitem>
1021 <para>
1022 Lists available functions, together with their argument and
1023 return types. If <replaceable
1024 class="parameter">pattern</replaceable>
1025 is specified, only functions whose names match the pattern are shown.
1026 If the form <literal>\df+</literal> is used, additional information about
1027 each function, including volatility, language, source code and description, is shown.
1028 The letter <literal>S</literal> adds the listing of system
1029 objects; without <literal>S</literal>, only non-system
1030 objects are shown.
1031 </para>
1033 <note>
1034 <para>
1035 To look up functions taking argument or returning values of a specific
1036 type, use your pager's search capability to scroll through the <literal>\df</>
1037 output.
1038 </para>
1040 <para>
1041 To reduce clutter, <literal>\df</> does not show data type I/O
1042 functions. This is implemented by ignoring functions that accept
1043 or return type <type>cstring</>.
1044 </para>
1045 </note>
1047 </listitem>
1048 </varlistentry>
1051 <varlistentry>
1052 <term><literal>\dF[+] [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
1053 <listitem>
1054 <para>
1055 Lists available text search configurations.
1056 If <replaceable class="parameter">pattern</replaceable> is specified,
1057 only configurations whose names match the pattern are shown.
1058 If the form <literal>\dF+</literal> is used, a full description of
1059 each configuration is shown, including the underlying text search
1060 parser and the dictionary list for each parser token type.
1061 </para>
1062 </listitem>
1063 </varlistentry>
1065 <varlistentry>
1066 <term><literal>\dFd[+] [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
1067 <listitem>
1068 <para>
1069 Lists available text search dictionaries.
1070 If <replaceable class="parameter">pattern</replaceable> is specified,
1071 only dictionaries whose names match the pattern are shown.
1072 If the form <literal>\dFd+</literal> is used, additional information
1073 is shown about each selected dictionary, including the underlying
1074 text search template and the option values.
1075 </para>
1076 </listitem>
1077 </varlistentry>
1079 <varlistentry>
1080 <term><literal>\dFp[+] [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
1081 <listitem>
1082 <para>
1083 Lists available text search parsers.
1084 If <replaceable class="parameter">pattern</replaceable> is specified,
1085 only parsers whose names match the pattern are shown.
1086 If the form <literal>\dFp+</literal> is used, a full description of
1087 each parser is shown, including the underlying functions and the
1088 list of recognized token types.
1089 </para>
1090 </listitem>
1091 </varlistentry>
1093 <varlistentry>
1094 <term><literal>\dFt[+] [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
1095 <listitem>
1096 <para>
1097 Lists available text search templates.
1098 If <replaceable class="parameter">pattern</replaceable> is specified,
1099 only templates whose names match the pattern are shown.
1100 If the form <literal>\dFt+</literal> is used, additional information
1101 is shown about each template, including the underlying function names.
1102 </para>
1103 </listitem>
1104 </varlistentry>
1107 <varlistentry>
1108 <term><literal>\dg [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
1109 <listitem>
1110 <para>
1111 Lists all database roles. If <replaceable
1112 class="parameter">pattern</replaceable> is specified, only
1113 those roles whose names match the pattern are listed.
1114 (This command is now effectively the same as <literal>\du</>.)
1115 </para>
1116 </listitem>
1117 </varlistentry>
1120 <varlistentry>
1121 <term><literal>\di[S+] [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
1122 <term><literal>\ds[S+] [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
1123 <term><literal>\dt[S+] [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
1124 <term><literal>\dv[S+] [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
1126 <listitem>
1127 <para>
1128 In this group of commands, the letters
1129 <literal>i</literal>, <literal>s</literal>,
1130 <literal>t</literal>, and <literal>v</literal>
1131 stand for index, sequence, table, and view, respectively.
1132 You can specify any or all of
1133 these letters, in any order, to obtain a listing of all the
1134 matching objects. For example, <literal>\dit</> lists indexes
1135 and tables. If <literal>+</literal> is
1136 appended to the command name, each object is listed with its
1137 physical size on disk and its associated description, if any.
1138 The letter <literal>S</literal> adds the listing of system
1139 objects; without <literal>S</literal>, only non-system
1140 objects are shown.
1141 </para>
1143 <para>
1144 If <replaceable class="parameter">pattern</replaceable> is
1145 specified, only objects whose names match the pattern are listed.
1146 </para>
1147 </listitem>
1148 </varlistentry>
1151 <varlistentry>
1152 <term><literal>\dl</literal></term>
1153 <listitem>
1154 <para>
1155 This is an alias for <command>\lo_list</command>, which shows a
1156 list of large objects.
1157 </para>
1158 </listitem>
1159 </varlistentry>
1162 <varlistentry>
1163 <term><literal>\dn[+] [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
1165 <listitem>
1166 <para>
1167 Lists all available schemas (namespaces). If <replaceable
1168 class="parameter">pattern</replaceable> (a regular expression)
1169 is specified, only schemas whose names match the pattern are listed.
1170 Non-local temporary schemas are suppressed. If <literal>+</literal>
1171 is appended to the command name, each object is listed with its associated
1172 permissions and description, if any.
1173 </para>
1174 </listitem>
1175 </varlistentry>
1178 <varlistentry>
1179 <term><literal>\do[S] [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
1180 <listitem>
1181 <para>
1182 Lists available operators with their operand and return types.
1183 If <replaceable class="parameter">pattern</replaceable> is
1184 specified, only operators whose names match the pattern are listed.
1185 The letter <literal>S</literal> adds the listing of system
1186 objects; without <literal>S</literal>, only non-system
1187 objects are shown.
1188 </para>
1189 </listitem>
1190 </varlistentry>
1193 <varlistentry>
1194 <term><literal>\dp [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
1195 <listitem>
1196 <para>
1197 Produces a list of all available tables, views and sequences with their
1198 associated access privileges.
1199 If <replaceable class="parameter">pattern</replaceable> is
1200 specified, only tables, views and sequences whose names match the pattern are listed.
1201 </para>
1203 <para>
1204 The <xref linkend="sql-grant" endterm="sql-grant-title"> and
1205 <xref linkend="sql-revoke" endterm="sql-revoke-title">
1206 commands are used to set access privileges.
1207 </para>
1208 </listitem>
1209 </varlistentry>
1212 <varlistentry>
1213 <term><literal>\dT[S+] [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
1214 <listitem>
1215 <para>
1216 Lists all data types or only those that match <replaceable
1217 class="parameter">pattern</replaceable>. The command form
1218 <literal>\dT+</literal> shows extra information, namely the type's internal name, size, and
1219 allowed values for <type>enum</> types.
1220 The letter <literal>S</literal> adds the listing of system
1221 objects; without <literal>S</literal>, only non-system
1222 objects are shown.
1223 </para>
1224 </listitem>
1225 </varlistentry>
1228 <varlistentry>
1229 <term><literal>\du [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
1230 <listitem>
1231 <para>
1232 Lists all database roles, or only those that match <replaceable
1233 class="parameter">pattern</replaceable>.
1234 </para>
1235 </listitem>
1236 </varlistentry>
1239 <varlistentry>
1240 <term><literal>\edit</literal> (or <literal>\e</literal>) <literal><optional> <replaceable class="parameter">filename</replaceable> </optional></literal></term>
1242 <listitem>
1243 <para>
1244 If <replaceable class="parameter">filename</replaceable> is
1245 specified, the file is edited; after the editor exits, its
1246 content is copied back to the query buffer. If no argument is
1247 given, the current query buffer is copied to a temporary file
1248 which is then edited in the same fashion.
1249 </para>
1251 <para>
1252 The new query buffer is then re-parsed according to the normal
1253 rules of <application>psql</application>, where the whole buffer
1254 is treated as a single line. (Thus you cannot make scripts this
1255 way. Use <command>\i</command> for that.) This means also that
1256 if the query ends with (or rather contains) a semicolon, it is
1257 immediately executed. In other cases it will merely wait in the
1258 query buffer.
1259 </para>
1261 <tip>
1262 <para>
1263 <application>psql</application> searches the environment
1264 variables <envar>PSQL_EDITOR</envar>, <envar>EDITOR</envar>, and
1265 <envar>VISUAL</envar> (in that order) for an editor to use. If
1266 all of them are unset, <filename>vi</filename> is used on Unix
1267 systems, <filename>notepad.exe</filename> on Windows systems.
1268 </para>
1269 </tip>
1270 </listitem>
1271 </varlistentry>
1274 <varlistentry>
1275 <term><literal>\ef <optional> <replaceable class="parameter">function_description</replaceable> </optional></literal></term>
1277 <listitem>
1278 <para>
1279 This command fetches and edits the definition of the named function,
1280 in the form of a <command>CREATE OR REPLACE FUNCTION</> command.
1281 Editing is done in the same way as for <literal>\e</>.
1282 After the editor exits, the updated command waits in the query buffer;
1283 type semicolon or <literal>\g</> to send it, or <literal>\r</>
1284 to cancel.
1285 </para>
1287 <para>
1288 The target function can be specified by name alone, or by name
1289 and arguments, for example <literal>foo(integer, text)</>.
1290 The argument types must be given if there is more
1291 than one function of the same name.
1292 </para>
1294 <para>
1295 If no function is specified, a blank <command>CREATE FUNCTION</>
1296 template is presented for editing.
1297 </para>
1298 </listitem>
1299 </varlistentry>
1302 <varlistentry>
1303 <term><literal>\echo <replaceable class="parameter">text</replaceable> [ ... ]</literal></term>
1304 <listitem>
1305 <para>
1306 Prints the arguments to the standard output, separated by one
1307 space and followed by a newline. This can be useful to
1308 intersperse information in the output of scripts. For example:
1309 <programlisting>
1310 =&gt; <userinput>\echo `date`</userinput>
1311 Tue Oct 26 21:40:57 CEST 1999
1312 </programlisting>
1313 If the first argument is an unquoted <literal>-n</literal> the trailing
1314 newline is not written.
1315 </para>
1317 <tip>
1318 <para>
1319 If you use the <command>\o</command> command to redirect your
1320 query output you might wish to use <command>\qecho</command>
1321 instead of this command.
1322 </para>
1323 </tip>
1324 </listitem>
1325 </varlistentry>
1328 <varlistentry>
1329 <term><literal>\encoding [ <replaceable class="parameter">encoding</replaceable> ]</literal></term>
1331 <listitem>
1332 <para>
1333 Sets the client character set encoding. Without an argument, this command
1334 shows the current encoding.
1335 </para>
1336 </listitem>
1337 </varlistentry>
1340 <varlistentry>
1341 <term><literal>\f [ <replaceable class="parameter">string</replaceable> ]</literal></term>
1343 <listitem>
1344 <para>
1345 Sets the field separator for unaligned query output. The default
1346 is the vertical bar (<literal>|</literal>). See also
1347 <command>\pset</command> for a generic way of setting output
1348 options.
1349 </para>
1350 </listitem>
1351 </varlistentry>
1354 <varlistentry>
1355 <term><literal>\g</literal> [ { <replaceable class="parameter">filename</replaceable> | <literal>|</literal><replaceable class="parameter">command</replaceable> } ]</term>
1357 <listitem>
1358 <para>
1359 Sends the current query input buffer to the server and
1360 optionally stores the query's output in <replaceable
1361 class="parameter">filename</replaceable> or pipes the output
1362 into a separate Unix shell executing <replaceable
1363 class="parameter">command</replaceable>. A bare
1364 <literal>\g</literal> is virtually equivalent to a semicolon. A
1365 <literal>\g</literal> with argument is a <quote>one-shot</quote>
1366 alternative to the <command>\o</command> command.
1367 </para>
1368 </listitem>
1369 </varlistentry>
1371 <varlistentry>
1372 <term><literal>\help</literal> (or <literal>\h</literal>) <literal>[ <replaceable class="parameter">command</replaceable> ]</literal></term>
1373 <listitem>
1374 <para>
1375 Gives syntax help on the specified <acronym>SQL</acronym>
1376 command. If <replaceable class="parameter">command</replaceable>
1377 is not specified, then <application>psql</application> will list
1378 all the commands for which syntax help is available. If
1379 <replaceable class="parameter">command</replaceable> is an
1380 asterisk (<literal>*</literal>), then syntax help on all
1381 <acronym>SQL</acronym> commands is shown.
1382 </para>
1384 <note>
1385 <para>
1386 To simplify typing, commands that consists of several words do
1387 not have to be quoted. Thus it is fine to type <userinput>\help
1388 alter table</userinput>.
1389 </para>
1390 </note>
1391 </listitem>
1392 </varlistentry>
1395 <varlistentry>
1396 <term><literal>\H</literal></term>
1397 <listitem>
1398 <para>
1399 Turns on <acronym>HTML</acronym> query output format. If the
1400 <acronym>HTML</acronym> format is already on, it is switched
1401 back to the default aligned text format. This command is for
1402 compatibility and convenience, but see <command>\pset</command>
1403 about setting other output options.
1404 </para>
1405 </listitem>
1406 </varlistentry>
1409 <varlistentry>
1410 <term><literal>\i <replaceable class="parameter">filename</replaceable></literal></term>
1411 <listitem>
1412 <para>
1413 Reads input from the file <replaceable
1414 class="parameter">filename</replaceable> and executes it as
1415 though it had been typed on the keyboard.
1416 </para>
1417 <note>
1418 <para>
1419 If you want to see the lines on the screen as they are read you
1420 must set the variable <varname>ECHO</varname> to
1421 <literal>all</literal>.
1422 </para>
1423 </note>
1424 </listitem>
1425 </varlistentry>
1428 <varlistentry>
1429 <term><literal>\l</literal> (or <literal>\list</literal>)</term>
1430 <term><literal>\l+</literal> (or <literal>\list+</literal>)</term>
1431 <listitem>
1432 <para>
1433 List the names, owners, character set encodings, and access privileges
1434 of all the databases in the server.
1435 If <literal>+</literal> is appended to the command name, database
1436 sizes, default tablespaces, and descriptions are also displayed.
1437 (Size information is only available for databases that the current
1438 user can connect to.)
1439 </para>
1440 </listitem>
1441 </varlistentry>
1444 <varlistentry>
1445 <term><literal>\lo_export <replaceable class="parameter">loid</replaceable> <replaceable class="parameter">filename</replaceable></literal></term>
1447 <listitem>
1448 <para>
1449 Reads the large object with <acronym>OID</acronym> <replaceable
1450 class="parameter">loid</replaceable> from the database and
1451 writes it to <replaceable
1452 class="parameter">filename</replaceable>. Note that this is
1453 subtly different from the server function
1454 <function>lo_export</function>, which acts with the permissions
1455 of the user that the database server runs as and on the server's
1456 file system.
1457 </para>
1458 <tip>
1459 <para>
1460 Use <command>\lo_list</command> to find out the large object's
1461 <acronym>OID</acronym>.
1462 </para>
1463 </tip>
1464 </listitem>
1465 </varlistentry>
1468 <varlistentry>
1469 <term><literal>\lo_import <replaceable class="parameter">filename</replaceable> [ <replaceable class="parameter">comment</replaceable> ]</literal></term>
1471 <listitem>
1472 <para>
1473 Stores the file into a <productname>PostgreSQL</productname>
1474 large object. Optionally, it associates the given
1475 comment with the object. Example:
1476 <programlisting>
1477 foo=&gt; <userinput>\lo_import '/home/peter/pictures/photo.xcf' 'a picture of me'</userinput>
1478 lo_import 152801
1479 </programlisting>
1480 The response indicates that the large object received object
1481 ID 152801, which can be used to access the newly-created large
1482 object in the future. For the sake of readability, it is
1483 recommended to always associate a human-readable comment with
1484 every object. Both OIDs and comments can be viewed with the
1485 <command>\lo_list</command> command.
1486 </para>
1488 <para>
1489 Note that this command is subtly different from the server-side
1490 <function>lo_import</function> because it acts as the local user
1491 on the local file system, rather than the server's user and file
1492 system.
1493 </para>
1494 </listitem>
1495 </varlistentry>
1497 <varlistentry>
1498 <term><literal>\lo_list</literal></term>
1499 <listitem>
1500 <para>
1501 Shows a list of all <productname>PostgreSQL</productname>
1502 large objects currently stored in the database,
1503 along with any comments provided for them.
1504 </para>
1505 </listitem>
1506 </varlistentry>
1508 <varlistentry>
1509 <term><literal>\lo_unlink <replaceable class="parameter">loid</replaceable></literal></term>
1511 <listitem>
1512 <para>
1513 Deletes the large object with <acronym>OID</acronym>
1514 <replaceable class="parameter">loid</replaceable> from the
1515 database.
1516 </para>
1518 <tip>
1519 <para>
1520 Use <command>\lo_list</command> to find out the large object's
1521 <acronym>OID</acronym>.
1522 </para>
1523 </tip>
1524 </listitem>
1525 </varlistentry>
1528 <varlistentry>
1529 <term><literal>\o</literal> [ {<replaceable class="parameter">filename</replaceable> | <literal>|</literal><replaceable class="parameter">command</replaceable>} ]</term>
1531 <listitem>
1532 <para>
1533 Saves future query results to the file <replaceable
1534 class="parameter">filename</replaceable> or pipes future results
1535 into a separate Unix shell to execute <replaceable
1536 class="parameter">command</replaceable>. If no arguments are
1537 specified, the query output will be reset to the standard output.
1538 </para>
1540 <para>
1541 <quote>Query results</quote> includes all tables, command
1542 responses, and notices obtained from the database server, as
1543 well as output of various backslash commands that query the
1544 database (such as <command>\d</command>), but not error
1545 messages.
1546 </para>
1548 <tip>
1549 <para>
1550 To intersperse text output in between query results, use
1551 <command>\qecho</command>.
1552 </para>
1553 </tip>
1554 </listitem>
1555 </varlistentry>
1558 <varlistentry>
1559 <term><literal>\p</literal></term>
1560 <listitem>
1561 <para>
1562 Print the current query buffer to the standard output.
1563 </para>
1564 </listitem>
1565 </varlistentry>
1567 <varlistentry>
1568 <term><literal>\password [ <replaceable class="parameter">username</replaceable> ]</literal></term>
1569 <listitem>
1570 <para>
1571 Changes the password of the specified user (by default, the current
1572 user). This command prompts for the new password, encrypts it, and
1573 sends it to the server as an <command>ALTER ROLE</> command. This
1574 makes sure that the new password does not appear in cleartext in the
1575 command history, the server log, or elsewhere.
1576 </para>
1577 </listitem>
1578 </varlistentry>
1580 <varlistentry>
1581 <term><literal>\prompt [ <replaceable class="parameter">text</replaceable> ] <replaceable class="parameter">name</replaceable></literal></term>
1582 <listitem>
1583 <para>
1584 Prompts the user to set variable <replaceable
1585 class="parameter">name</>. An optional prompt, <replaceable
1586 class="parameter">text</>, can be specified. (For multi-word
1587 prompts, use single-quotes.)
1588 </para>
1590 <para>
1591 By default, <literal>\prompt</> uses the terminal for input and
1592 output. However, if the <option>-f</> command line switch is
1593 used, <literal>\prompt</> uses standard input and standard output.
1594 </para>
1595 </listitem>
1596 </varlistentry>
1598 <varlistentry>
1599 <term><literal>\pset <replaceable class="parameter">parameter</replaceable> [ <replaceable class="parameter">value</replaceable> ]</literal></term>
1601 <listitem>
1602 <para>
1603 This command sets options affecting the output of query result
1604 tables. <replaceable class="parameter">parameter</replaceable>
1605 describes which option is to be set. The semantics of
1606 <replaceable class="parameter">value</replaceable> depend
1607 thereon.
1608 </para>
1610 <para>
1611 Adjustable printing options are:
1612 <variablelist>
1613 <varlistentry>
1614 <term><literal>format</literal></term>
1615 <listitem>
1616 <para>
1617 Sets the output format to one of <literal>unaligned</literal>,
1618 <literal>aligned</literal>, <literal>wrapped</literal>,
1619 <literal>html</literal>,
1620 <literal>latex</literal>, or <literal>troff-ms</literal>.
1621 Unique abbreviations are allowed. (That would mean one letter
1622 is enough.)
1623 </para>
1625 <para>
1626 <quote>Unaligned</quote> writes all columns of a row on a
1627 line, separated by the currently active field separator. This
1628 is intended to create output that might be intended to be read
1629 in by other programs (tab-separated, comma-separated).
1630 <quote>Aligned</quote> mode is the standard, human-readable,
1631 nicely formatted text output that is default.
1632 </para>
1634 <para>
1635 <quote>Wrapped</quote> is like <literal>aligned</> but wraps
1636 output to the specified width. If <literal>\pset columns</> is
1637 zero (the default), <literal>wrapped</> mode only affects screen
1638 output and wrapped width is controlled by the environment
1639 variable <envar>COLUMNS</> or the detected screen width. If
1640 <literal>\pset columns</> is set to a non-zero value, all output
1641 is wrapped, including file and pipe output.
1642 </para>
1644 <para>
1645 The <quote><acronym>HTML</acronym></quote> and
1646 <quote>LaTeX</quote> modes put out tables that are intended to
1647 be included in documents using the respective mark-up
1648 language. They are not complete documents! (This might not be
1649 so dramatic in <acronym>HTML</acronym>, but in LaTeX you must
1650 have a complete document wrapper.)
1651 </para>
1652 </listitem>
1653 </varlistentry>
1655 <varlistentry>
1656 <term><literal>columns</literal></term>
1657 <listitem>
1658 <para>
1659 Controls the target width for the <literal>wrapped</> format,
1660 and width for determining if wide output requires the pager.
1661 Zero (the default) causes the <literal>wrapped</> format to
1662 affect only screen output.
1663 </para>
1664 </listitem>
1665 </varlistentry>
1667 <varlistentry>
1668 <term><literal>border</literal></term>
1669 <listitem>
1670 <para>
1671 The second argument must be a number. In general, the higher
1672 the number the more borders and lines the tables will have,
1673 but this depends on the particular format. In
1674 <acronym>HTML</acronym> mode, this will translate directly
1675 into the <literal>border=...</literal> attribute, in the
1676 others only values 0 (no border), 1 (internal dividing lines),
1677 and 2 (table frame) make sense.
1678 </para>
1679 </listitem>
1680 </varlistentry>
1682 <varlistentry>
1683 <term><literal>expanded</literal> (or <literal>x</literal>)</term>
1684 <listitem>
1685 <para>
1686 You can specify an optional second argument, if it is provided it
1687 may be either <literal>on</literal> or <literal>off</literal>
1688 which will enable or disable expanded mode. If the second
1689 argument is not provided then we will toggle between regular and
1690 expanded format. When expanded format is enabled, query results
1691 are displayed in two columns, with the column name on the left and
1692 the data on the right. This mode is useful if the data wouldn't fit
1693 on the screen in the normal <quote>horizontal</quote> mode.
1694 </para>
1696 <para>
1697 Expanded mode is supported by all four output formats.
1698 </para>
1699 </listitem>
1700 </varlistentry>
1702 <varlistentry>
1703 <term><literal>null</literal></term>
1704 <listitem>
1705 <para>
1706 The second argument is a string that should be printed
1707 whenever a column is null. The default is not to print
1708 anything, which can easily be mistaken for, say, an empty
1709 string. Thus, one might choose to write <literal>\pset null
1710 '(null)'</literal>.
1711 </para>
1712 </listitem>
1713 </varlistentry>
1715 <varlistentry>
1716 <term><literal>fieldsep</literal></term>
1717 <listitem>
1718 <para>
1719 Specifies the field separator to be used in unaligned output
1720 mode. That way one can create, for example, tab- or
1721 comma-separated output, which other programs might prefer. To
1722 set a tab as field separator, type <literal>\pset fieldsep
1723 '\t'</literal>. The default field separator is
1724 <literal>'|'</literal> (a vertical bar).
1725 </para>
1726 </listitem>
1727 </varlistentry>
1729 <varlistentry>
1730 <term><literal>footer</literal></term>
1731 <listitem>
1732 <para>
1733 You can specify an optional second argument, if it is provided it
1734 may be either <literal>on</literal> or <literal>off</literal>
1735 which will enable or disable display of the default footer
1736 <literal>(x rows)</literal>. If the second argument is not
1737 provided then we will toggle between on and off.
1738 </para>
1739 </listitem>
1740 </varlistentry>
1742 <varlistentry>
1743 <term><literal>numericlocale</literal></term>
1744 <listitem>
1745 <para>
1746 You can specify an optional second argument, if it is provided it
1747 may be either <literal>on</literal> or <literal>off</literal>
1748 which will enable or disable display of a locale-aware character
1749 to separate groups of digits to the left of the decimal marker. If
1750 the second argument is not provided then we will toggle between
1751 on and off.
1752 </para>
1753 </listitem>
1754 </varlistentry>
1756 <varlistentry>
1757 <term><literal>recordsep</literal></term>
1758 <listitem>
1759 <para>
1760 Specifies the record (line) separator to use in unaligned
1761 output mode. The default is a newline character.
1762 </para>
1763 </listitem>
1764 </varlistentry>
1766 <varlistentry>
1767 <term><literal>tuples_only</literal> (or <literal>t</literal>)</term>
1768 <listitem>
1769 <para>
1770 You can specify an optional second argument, if it is provided it
1771 may be either <literal>on</literal> or <literal>off</literal>
1772 which will enable or disable the tuples only mode. If the
1773 second argument is not provided then we will toggle between tuples
1774 only and full display. Full display shows extra information such
1775 as column headers, titles, and various footers. In tuples only
1776 mode, only actual table data is shown.
1777 </para>
1778 </listitem>
1779 </varlistentry>
1781 <varlistentry>
1782 <term><literal>title [ <replaceable class="parameter">text</replaceable> ]</literal></term>
1783 <listitem>
1784 <para>
1785 Sets the table title for any subsequently printed tables. This
1786 can be used to give your output descriptive tags. If no
1787 argument is given, the title is unset.
1788 </para>
1789 </listitem>
1790 </varlistentry>
1792 <varlistentry>
1793 <term><literal>tableattr</literal> (or <literal>T</literal>) <literal>[ <replaceable class="parameter">text</replaceable> ]</literal></term>
1794 <listitem>
1795 <para>
1796 Allows you to specify any attributes to be placed inside the
1797 <acronym>HTML</acronym> <sgmltag>table</sgmltag> tag. This
1798 could for example be <literal>cellpadding</literal> or
1799 <literal>bgcolor</literal>. Note that you probably don't want
1800 to specify <literal>border</literal> here, as that is already
1801 taken care of by <literal>\pset border</literal>.
1802 </para>
1803 </listitem>
1804 </varlistentry>
1807 <varlistentry>
1808 <term><literal>pager</literal></term>
1809 <listitem>
1810 <para>
1811 Controls use of a pager for query and <application>psql</>
1812 help output. If the environment variable <envar>PAGER</envar>
1813 is set, the output is piped to the specified program.
1814 Otherwise a platform-dependent default (such as
1815 <filename>more</filename>) is used.
1816 </para>
1818 <para>
1819 When the pager is <literal>off</>, the pager is not used. When the pager
1820 is <literal>on</>, the pager is used only when appropriate, i.e. the
1821 output is to a terminal and will not fit on the screen.
1822 <literal>\pset pager</> turns the pager on and off. Pager can
1823 also be set to <literal>always</>, which causes the pager to be
1824 always used.
1825 </para>
1826 </listitem>
1827 </varlistentry>
1828 </variablelist>
1829 </para>
1831 <para>
1832 Illustrations on how these different formats look can be seen in
1833 the <xref linkend="APP-PSQL-examples"
1834 endterm="APP-PSQL-examples-title"> section.
1835 </para>
1837 <tip>
1838 <para>
1839 There are various shortcut commands for <command>\pset</command>. See
1840 <command>\a</command>, <command>\C</command>, <command>\H</command>,
1841 <command>\t</command>, <command>\T</command>, and <command>\x</command>.
1842 </para>
1843 </tip>
1845 <note>
1846 <para>
1847 It is an error to call <command>\pset</command> without
1848 arguments. In the future this call might show the current status
1849 of all printing options.
1850 </para>
1851 </note>
1853 </listitem>
1854 </varlistentry>
1857 <varlistentry>
1858 <term><literal>\q</literal></term>
1859 <listitem>
1860 <para>
1861 Quits the <application>psql</application> program.
1862 </para>
1863 </listitem>
1864 </varlistentry>
1867 <varlistentry>
1868 <term><literal>\qecho <replaceable class="parameter">text</replaceable> [ ... ] </literal></term>
1869 <listitem>
1870 <para>
1871 This command is identical to <command>\echo</command> except
1872 that the output will be written to the query output channel, as
1873 set by <command>\o</command>.
1874 </para>
1875 </listitem>
1876 </varlistentry>
1879 <varlistentry>
1880 <term><literal>\r</literal></term>
1881 <listitem>
1882 <para>
1883 Resets (clears) the query buffer.
1884 </para>
1885 </listitem>
1886 </varlistentry>
1889 <varlistentry>
1890 <term><literal>\s [ <replaceable class="parameter">filename</replaceable> ]</literal></term>
1891 <listitem>
1892 <para>
1893 Print or save the command line history to <replaceable
1894 class="parameter">filename</replaceable>. If <replaceable
1895 class="parameter">filename</replaceable> is omitted, the history
1896 is written to the standard output. This option is only available
1897 if <application>psql</application> is configured to use the
1898 <acronym>GNU</acronym> <application>Readline</application> library.
1899 </para>
1900 </listitem>
1901 </varlistentry>
1904 <varlistentry>
1905 <term><literal>\set [ <replaceable class="parameter">name</replaceable> [ <replaceable class="parameter">value</replaceable> [ ... ] ] ]</literal></term>
1907 <listitem>
1908 <para>
1909 Sets the internal variable <replaceable
1910 class="parameter">name</replaceable> to <replaceable
1911 class="parameter">value</replaceable> or, if more than one value
1912 is given, to the concatenation of all of them. If no second
1913 argument is given, the variable is just set with no value. To
1914 unset a variable, use the <command>\unset</command> command.
1915 </para>
1917 <para>
1918 Valid variable names can contain characters, digits, and
1919 underscores. See the section <xref
1920 linkend="APP-PSQL-variables"
1921 endterm="APP-PSQL-variables-title"> below for details.
1922 Variable names are case-sensitive.
1923 </para>
1925 <para>
1926 Although you are welcome to set any variable to anything you
1927 want, <application>psql</application> treats several variables
1928 as special. They are documented in the section about variables.
1929 </para>
1931 <note>
1932 <para>
1933 This command is totally separate from the <acronym>SQL</acronym>
1934 command <xref linkend="SQL-SET" endterm="SQL-SET-title">.
1935 </para>
1936 </note>
1937 </listitem>
1938 </varlistentry>
1941 <varlistentry>
1942 <term><literal>\t</literal></term>
1943 <listitem>
1944 <para>
1945 Toggles the display of output column name headings and row count
1946 footer. This command is equivalent to <literal>\pset
1947 tuples_only</literal> and is provided for convenience.
1948 </para>
1949 </listitem>
1950 </varlistentry>
1953 <varlistentry>
1954 <term><literal>\T <replaceable class="parameter">table_options</replaceable></literal></term>
1955 <listitem>
1956 <para>
1957 Allows you to specify attributes to be placed within the
1958 <sgmltag>table</sgmltag> tag in <acronym>HTML</acronym> tabular
1959 output mode. This command is equivalent to <literal>\pset
1960 tableattr <replaceable
1961 class="parameter">table_options</replaceable></literal>.
1962 </para>
1963 </listitem>
1964 </varlistentry>
1967 <varlistentry>
1968 <term><literal>\timing [ <replaceable class="parameter">on</replaceable> | <replaceable class="parameter">off</replaceable> ]</literal></term>
1969 <listitem>
1970 <para>
1971 Without parameter, toggles a display of how long each SQL statement
1972 takes, in milliseconds. With parameter, sets same.
1973 </para>
1974 </listitem>
1975 </varlistentry>
1978 <varlistentry>
1979 <term><literal>\w</literal> {<replaceable class="parameter">filename</replaceable> | <replaceable class="parameter">|command</replaceable>}</term>
1980 <listitem>
1981 <para>
1982 Outputs the current query buffer to the file <replaceable
1983 class="parameter">filename</replaceable> or pipes it to the Unix
1984 command <replaceable class="parameter">command</replaceable>.
1985 </para>
1986 </listitem>
1987 </varlistentry>
1990 <varlistentry>
1991 <term><literal>\x</literal></term>
1992 <listitem>
1993 <para>
1994 Toggles expanded table formatting mode. As such it is equivalent to
1995 <literal>\pset expanded</literal>.
1996 </para>
1997 </listitem>
1998 </varlistentry>
2001 <varlistentry>
2002 <term><literal>\z [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
2003 <listitem>
2004 <para>
2005 Produces a list of all available tables, views and sequences with their
2006 associated access privileges.
2007 If a <replaceable class="parameter">pattern</replaceable> is
2008 specified, only tables,views and sequences whose names match the pattern are listed.
2009 </para>
2011 <para>
2012 The <xref linkend="sql-grant" endterm="sql-grant-title"> and
2013 <xref linkend="sql-revoke" endterm="sql-revoke-title">
2014 commands are used to set access privileges.
2015 </para>
2017 <para>
2018 This is an alias for <command>\dp</command> (<quote>display
2019 privileges</quote>).
2020 </para>
2021 </listitem>
2022 </varlistentry>
2025 <varlistentry>
2026 <term><literal>\! [ <replaceable class="parameter">command</replaceable> ]</literal></term>
2027 <listitem>
2028 <para>
2029 Escapes to a separate Unix shell or executes the Unix command
2030 <replaceable class="parameter">command</replaceable>. The
2031 arguments are not further interpreted, the shell will see them
2032 as is.
2033 </para>
2034 </listitem>
2035 </varlistentry>
2038 <varlistentry>
2039 <term><literal>\?</literal></term>
2040 <listitem>
2041 <para>
2042 Shows help information about the backslash commands.
2043 </para>
2044 </listitem>
2045 </varlistentry>
2047 </variablelist>
2048 </para>
2050 <refsect3 id="APP-PSQL-patterns">
2051 <title id="APP-PSQL-patterns-title">Patterns</title>
2053 <indexterm>
2054 <primary>patterns</primary>
2055 <secondary>in psql and pg_dump</secondary>
2056 </indexterm>
2058 <para>
2059 The various <literal>\d</> commands accept a <replaceable
2060 class="parameter">pattern</replaceable> parameter to specify the
2061 object name(s) to be displayed. In the simplest case, a pattern
2062 is just the exact name of the object. The characters within a
2063 pattern are normally folded to lower case, just as in SQL names;
2064 for example, <literal>\dt FOO</> will display the table named
2065 <literal>foo</>. As in SQL names, placing double quotes around
2066 a pattern stops folding to lower case. Should you need to include
2067 an actual double quote character in a pattern, write it as a pair
2068 of double quotes within a double-quote sequence; again this is in
2069 accord with the rules for SQL quoted identifiers. For example,
2070 <literal>\dt "FOO""BAR"</> will display the table named
2071 <literal>FOO"BAR</> (not <literal>foo"bar</>). Unlike the normal
2072 rules for SQL names, you can put double quotes around just part
2073 of a pattern, for instance <literal>\dt FOO"FOO"BAR</> will display
2074 the table named <literal>fooFOObar</>.
2075 </para>
2077 <para>
2078 Within a pattern, <literal>*</> matches any sequence of characters
2079 (including no characters) and <literal>?</> matches any single character.
2080 (This notation is comparable to Unix shell file name patterns.)
2081 For example, <literal>\dt int*</> displays all tables whose names
2082 begin with <literal>int</>. But within double quotes, <literal>*</>
2083 and <literal>?</> lose these special meanings and are just matched
2084 literally.
2085 </para>
2087 <para>
2088 A pattern that contains a dot (<literal>.</>) is interpreted as a schema
2089 name pattern followed by an object name pattern. For example,
2090 <literal>\dt foo*.*bar*</> displays all tables whose table name
2091 includes <literal>bar</> that are in schemas whose schema name
2092 starts with <literal>foo</>. When no dot appears, then the pattern
2093 matches only objects that are visible in the current schema search path.
2094 Again, a dot within double quotes loses its special meaning and is matched
2095 literally.
2096 </para>
2098 <para>
2099 Advanced users can use regular-expression notations such as character
2100 classes, for example <literal>[0-9]</> to match any digit. All regular
2101 expression special characters work as specified in
2102 <xref linkend="functions-posix-regexp">, except for <literal>.</> which
2103 is taken as a separator as mentioned above, <literal>*</> which is
2104 translated to the regular-expression notation <literal>.*</>,
2105 <literal>?</> which is translated to <literal>.</>, and
2106 <literal>$</> which is matched literally. You can emulate
2107 these pattern characters at need by writing
2108 <literal>?</> for <literal>.</>,
2109 <literal>(<replaceable class="parameter">R</replaceable>+|)</literal> for
2110 <literal><replaceable class="parameter">R</replaceable>*</literal>, or
2111 <literal>(<replaceable class="parameter">R</replaceable>|)</literal> for
2112 <literal><replaceable class="parameter">R</replaceable>?</literal>.
2113 <literal>$</> is not needed as a regular-expression character since
2114 the pattern must match the whole name, unlike the usual
2115 interpretation of regular expressions (in other words, <literal>$</>
2116 is automatically appended to your pattern). Write <literal>*</> at the
2117 beginning and/or end if you don't wish the pattern to be anchored.
2118 Note that within double quotes, all regular expression special characters
2119 lose their special meanings and are matched literally. Also, the regular
2120 expression special characters are matched literally in operator name
2121 patterns (i.e., the argument of <literal>\do</>).
2122 </para>
2124 <para>
2125 Whenever the <replaceable class="parameter">pattern</replaceable> parameter
2126 is omitted completely, the <literal>\d</> commands display all objects
2127 that are visible in the current schema search path &mdash; this is
2128 equivalent to using the pattern <literal>*</>.
2129 To see all objects in the database, use the pattern <literal>*.*</>.
2130 </para>
2131 </refsect3>
2132 </refsect2>
2134 <refsect2>
2135 <title>Advanced features</title>
2137 <refsect3 id="APP-PSQL-variables">
2138 <title id="APP-PSQL-variables-title">Variables</title>
2140 <para>
2141 <application>psql</application> provides variable substitution
2142 features similar to common Unix command shells.
2143 Variables are simply name/value pairs, where the value
2144 can be any string of any length. To set variables, use the
2145 <application>psql</application> meta-command
2146 <command>\set</command>:
2147 <programlisting>
2148 testdb=&gt; <userinput>\set foo bar</userinput>
2149 </programlisting>
2150 sets the variable <literal>foo</literal> to the value
2151 <literal>bar</literal>. To retrieve the content of the variable, precede
2152 the name with a colon and use it as the argument of any slash
2153 command:
2154 <programlisting>
2155 testdb=&gt; <userinput>\echo :foo</userinput>
2157 </programlisting>
2158 </para>
2160 <note>
2161 <para>
2162 The arguments of <command>\set</command> are subject to the same
2163 substitution rules as with other commands. Thus you can construct
2164 interesting references such as <literal>\set :foo
2165 'something'</literal> and get <quote>soft links</quote> or
2166 <quote>variable variables</quote> of <productname>Perl</productname>
2167 or <productname><acronym>PHP</acronym></productname> fame,
2168 respectively. Unfortunately (or fortunately?), there is no way to do
2169 anything useful with these constructs. On the other hand,
2170 <literal>\set bar :foo</literal> is a perfectly valid way to copy a
2171 variable.
2172 </para>
2173 </note>
2175 <para>
2176 If you call <command>\set</command> without a second argument, the
2177 variable is set, with an empty string as value. To unset (or delete) a
2178 variable, use the command <command>\unset</command>.
2179 </para>
2181 <para>
2182 <application>psql</application>'s internal variable names can
2183 consist of letters, numbers, and underscores in any order and any
2184 number of them. A number of these variables are treated specially
2185 by <application>psql</application>. They indicate certain option
2186 settings that can be changed at run time by altering the value of
2187 the variable or represent some state of the application. Although
2188 you can use these variables for any other purpose, this is not
2189 recommended, as the program behavior might grow really strange
2190 really quickly. By convention, all specially treated variables
2191 consist of all upper-case letters (and possibly numbers and
2192 underscores). To ensure maximum compatibility in the future, avoid
2193 using such variable names for your own purposes. A list of all specially
2194 treated variables follows.
2195 </para>
2197 <variablelist>
2198 <varlistentry>
2199 <indexterm>
2200 <primary>autocommit</primary>
2201 <secondary>psql</secondary>
2202 </indexterm>
2203 <term><varname>AUTOCOMMIT</varname></term>
2204 <listitem>
2205 <para>
2206 When <literal>on</> (the default), each SQL command is automatically
2207 committed upon successful completion. To postpone commit in this
2208 mode, you must enter a <command>BEGIN</> or <command>START
2209 TRANSACTION</> SQL command. When <literal>off</> or unset, SQL
2210 commands are not committed until you explicitly issue
2211 <command>COMMIT</> or <command>END</>. The autocommit-off
2212 mode works by issuing an implicit <command>BEGIN</> for you, just
2213 before any command that is not already in a transaction block and
2214 is not itself a <command>BEGIN</> or other transaction-control
2215 command, nor a command that cannot be executed inside a transaction
2216 block (such as <command>VACUUM</>).
2217 </para>
2219 <note>
2220 <para>
2221 In autocommit-off mode, you must explicitly abandon any failed
2222 transaction by entering <command>ABORT</> or <command>ROLLBACK</>.
2223 Also keep in mind that if you exit the session
2224 without committing, your work will be lost.
2225 </para>
2226 </note>
2228 <note>
2229 <para>
2230 The autocommit-on mode is <productname>PostgreSQL</>'s traditional
2231 behavior, but autocommit-off is closer to the SQL spec. If you
2232 prefer autocommit-off, you might wish to set it in the system-wide
2233 <filename>psqlrc</filename> file or your
2234 <filename>~/.psqlrc</filename> file.
2235 </para>
2236 </note>
2237 </listitem>
2238 </varlistentry>
2240 <varlistentry>
2241 <term><varname>DBNAME</varname></term>
2242 <listitem>
2243 <para>
2244 The name of the database you are currently connected to. This is
2245 set every time you connect to a database (including program
2246 start-up), but can be unset.
2247 </para>
2248 </listitem>
2249 </varlistentry>
2251 <varlistentry>
2252 <term><varname>ECHO</varname></term>
2253 <listitem>
2254 <para>
2255 If set to <literal>all</literal>, all lines
2256 entered from the keyboard or from a script are written to the standard output
2257 before they are parsed or executed. To select this behavior on program
2258 start-up, use the switch <option>-a</option>. If set to
2259 <literal>queries</literal>,
2260 <application>psql</application> merely prints all queries as
2261 they are sent to the server. The switch for this is
2262 <option>-e</option>.
2263 </para>
2264 </listitem>
2265 </varlistentry>
2267 <varlistentry>
2268 <term><varname>ECHO_HIDDEN</varname></term>
2269 <listitem>
2270 <para>
2271 When this variable is set and a backslash command queries the
2272 database, the query is first shown. This way you can study the
2273 <productname>PostgreSQL</productname> internals and provide
2274 similar functionality in your own programs. (To select this behavior
2275 on program start-up, use the switch <option>-E</option>.) If you set
2276 the variable to the value <literal>noexec</literal>, the queries are
2277 just shown but are not actually sent to the server and executed.
2278 </para>
2279 </listitem>
2280 </varlistentry>
2282 <varlistentry>
2283 <term><varname>ENCODING</varname></term>
2284 <listitem>
2285 <para>
2286 The current client character set encoding.
2287 </para>
2288 </listitem>
2289 </varlistentry>
2291 <varlistentry>
2292 <term><varname>FETCH_COUNT</varname></term>
2293 <listitem>
2294 <para>
2295 If this variable is set to an integer value &gt; 0,
2296 the results of <command>SELECT</command> queries are fetched
2297 and displayed in groups of that many rows, rather than the
2298 default behavior of collecting the entire result set before
2299 display. Therefore only a
2300 limited amount of memory is used, regardless of the size of
2301 the result set. Settings of 100 to 1000 are commonly used
2302 when enabling this feature.
2303 Keep in mind that when using this feature, a query might
2304 fail after having already displayed some rows.
2305 </para>
2306 <tip>
2307 <para>
2308 Although you can use any output format with this feature,
2309 the default <literal>aligned</> format tends to look bad
2310 because each group of <varname>FETCH_COUNT</varname> rows
2311 will be formatted separately, leading to varying column
2312 widths across the row groups. The other output formats work better.
2313 </para>
2314 </tip>
2315 </listitem>
2316 </varlistentry>
2318 <varlistentry>
2319 <term><varname>HISTCONTROL</varname></term>
2320 <listitem>
2321 <para>
2322 If this variable is set to <literal>ignorespace</literal>,
2323 lines which begin with a space are not entered into the history
2324 list. If set to a value of <literal>ignoredups</literal>, lines
2325 matching the previous history line are not entered. A value of
2326 <literal>ignoreboth</literal> combines the two options. If
2327 unset, or if set to any other value than those above, all lines
2328 read in interactive mode are saved on the history list.
2329 </para>
2330 <note>
2331 <para>
2332 This feature was shamelessly plagiarized from
2333 <application>Bash</application>.
2334 </para>
2335 </note>
2336 </listitem>
2337 </varlistentry>
2339 <varlistentry>
2340 <term><varname>HISTFILE</varname></term>
2341 <listitem>
2342 <para>
2343 The file name that will be used to store the history list. The default
2344 value is <filename>~/.psql_history</filename>. For example, putting:
2345 <programlisting>
2346 \set HISTFILE ~/.psql_history- :DBNAME
2347 </programlisting>
2348 in <filename>~/.psqlrc</filename> will cause
2349 <application>psql</application> to maintain a separate history for
2350 each database.
2351 </para>
2352 <note>
2353 <para>
2354 This feature was shamelessly plagiarized from
2355 <application>Bash</application>.
2356 </para>
2357 </note>
2358 </listitem>
2359 </varlistentry>
2361 <varlistentry>
2362 <term><varname>HISTSIZE</varname></term>
2363 <listitem>
2364 <para>
2365 The number of commands to store in the command history. The
2366 default value is 500.
2367 </para>
2368 <note>
2369 <para>
2370 This feature was shamelessly plagiarized from
2371 <application>Bash</application>.
2372 </para>
2373 </note>
2374 </listitem>
2375 </varlistentry>
2377 <varlistentry>
2378 <term><varname>HOST</varname></term>
2379 <listitem>
2380 <para>
2381 The database server host you are currently connected to. This is
2382 set every time you connect to a database (including program
2383 start-up), but can be unset.
2384 </para>
2385 </listitem>
2386 </varlistentry>
2388 <varlistentry>
2389 <term><varname>IGNOREEOF</varname></term>
2390 <listitem>
2391 <para>
2392 If unset, sending an <acronym>EOF</> character (usually
2393 <keycombo action="simul"><keycap>Control</><keycap>D</></>)
2394 to an interactive session of <application>psql</application>
2395 will terminate the application. If set to a numeric value,
2396 that many <acronym>EOF</> characters are ignored before the
2397 application terminates. If the variable is set but has no
2398 numeric value, the default is 10.
2399 </para>
2400 <note>
2401 <para>
2402 This feature was shamelessly plagiarized from
2403 <application>Bash</application>.
2404 </para>
2405 </note>
2406 </listitem>
2407 </varlistentry>
2409 <varlistentry>
2410 <term><varname>LASTOID</varname></term>
2411 <listitem>
2412 <para>
2413 The value of the last affected OID, as returned from an
2414 <command>INSERT</command> or <command>lo_insert</command>
2415 command. This variable is only guaranteed to be valid until
2416 after the result of the next <acronym>SQL</acronym> command has
2417 been displayed.
2418 </para>
2419 </listitem>
2420 </varlistentry>
2422 <varlistentry>
2423 <indexterm>
2424 <primary>rollback</primary>
2425 <secondary>psql</secondary>
2426 </indexterm>
2427 <term><varname>ON_ERROR_ROLLBACK</varname></term>
2428 <listitem>
2429 <para>
2430 When <literal>on</>, if a statement in a transaction block
2431 generates an error, the error is ignored and the transaction
2432 continues. When <literal>interactive</>, such errors are only
2433 ignored in interactive sessions, and not when reading script
2434 files. When <literal>off</> (the default), a statement in a
2435 transaction block that generates an error aborts the entire
2436 transaction. The on_error_rollback-on mode works by issuing an
2437 implicit <command>SAVEPOINT</> for you, just before each command
2438 that is in a transaction block, and rolls back to the savepoint
2439 on error.
2440 </para>
2441 </listitem>
2442 </varlistentry>
2444 <varlistentry>
2445 <term><varname>ON_ERROR_STOP</varname></term>
2446 <listitem>
2447 <para>
2448 By default, if non-interactive scripts encounter an error, such
2449 as a malformed <acronym>SQL</acronym> command or internal
2450 meta-command, processing continues. This has been the
2451 traditional behavior of <application>psql</application> but it
2452 is sometimes not desirable. If this variable is set, script
2453 processing will immediately terminate. If the script was called
2454 from another script it will terminate in the same fashion. If
2455 the outermost script was not called from an interactive
2456 <application>psql</application> session but rather using the
2457 <option>-f</option> option, <application>psql</application> will
2458 return error code 3, to distinguish this case from fatal error
2459 conditions (error code 1).
2460 </para>
2461 </listitem>
2462 </varlistentry>
2464 <varlistentry>
2465 <term><varname>PORT</varname></term>
2466 <listitem>
2467 <para>
2468 The database server port to which you are currently connected.
2469 This is set every time you connect to a database (including
2470 program start-up), but can be unset.
2471 </para>
2472 </listitem>
2473 </varlistentry>
2475 <varlistentry>
2476 <term><varname>PROMPT1</varname></term>
2477 <term><varname>PROMPT2</varname></term>
2478 <term><varname>PROMPT3</varname></term>
2479 <listitem>
2480 <para>
2481 These specify what the prompts <application>psql</application>
2482 issues should look like. See <xref
2483 linkend="APP-PSQL-prompting"
2484 endterm="APP-PSQL-prompting-title"> below.
2485 </para>
2486 </listitem>
2487 </varlistentry>
2489 <varlistentry>
2490 <term><varname>QUIET</varname></term>
2491 <listitem>
2492 <para>
2493 This variable is equivalent to the command line option
2494 <option>-q</option>. It is probably not too useful in
2495 interactive mode.
2496 </para>
2497 </listitem>
2498 </varlistentry>
2500 <varlistentry>
2501 <term><varname>SINGLELINE</varname></term>
2502 <listitem>
2503 <para>
2504 This variable is equivalent to the command line option
2505 <option>-S</option>.
2506 </para>
2507 </listitem>
2508 </varlistentry>
2510 <varlistentry>
2511 <term><varname>SINGLESTEP</varname></term>
2512 <listitem>
2513 <para>
2514 This variable is equivalent to the command line option
2515 <option>-s</option>.
2516 </para>
2517 </listitem>
2518 </varlistentry>
2520 <varlistentry>
2521 <term><varname>USER</varname></term>
2522 <listitem>
2523 <para>
2524 The database user you are currently connected as. This is set
2525 every time you connect to a database (including program
2526 start-up), but can be unset.
2527 </para>
2528 </listitem>
2529 </varlistentry>
2531 <varlistentry>
2532 <term><varname>VERBOSITY</varname></term>
2533 <listitem>
2534 <para>
2535 This variable can be set to the values <literal>default</>,
2536 <literal>verbose</>, or <literal>terse</> to control the verbosity
2537 of error reports.
2538 </para>
2539 </listitem>
2540 </varlistentry>
2542 </variablelist>
2544 </refsect3>
2546 <refsect3>
2547 <title><acronym>SQL</acronym> Interpolation</title>
2549 <para>
2550 An additional useful feature of <application>psql</application>
2551 variables is that you can substitute (<quote>interpolate</quote>)
2552 them into regular <acronym>SQL</acronym> statements. The syntax for
2553 this is again to prepend the variable name with a colon
2554 (<literal>:</literal>):
2555 <programlisting>
2556 testdb=&gt; <userinput>\set foo 'my_table'</userinput>
2557 testdb=&gt; <userinput>SELECT * FROM :foo;</userinput>
2558 </programlisting>
2559 would then query the table <literal>my_table</literal>. The value of
2560 the variable is copied literally, so it can even contain unbalanced
2561 quotes or backslash commands. You must make sure that it makes sense
2562 where you put it. Variable interpolation will not be performed into
2563 quoted <acronym>SQL</acronym> entities.
2564 </para>
2566 <para>
2567 One possible use of this mechanism is to
2568 copy the contents of a file into a table column. First load the file into a
2569 variable and then proceed as above:
2570 <programlisting>
2571 testdb=&gt; <userinput>\set content '''' `cat my_file.txt` ''''</userinput>
2572 testdb=&gt; <userinput>INSERT INTO my_table VALUES (:content);</userinput>
2573 </programlisting>
2574 One problem with this approach is that <filename>my_file.txt</filename>
2575 might contain single quotes. These need to be escaped so that
2576 they don't cause a syntax error when the second line is processed. This
2577 could be done with the program <command>sed</command>:
2578 <programlisting>
2579 testdb=&gt; <userinput>\set content '''' `sed -e "s/'/''/g" &lt; my_file.txt` ''''</userinput>
2580 </programlisting>
2581 If you are using non-standard-conforming strings then you'll also need
2582 to double backslashes. This is a bit tricky:
2583 <programlisting>
2584 testdb=&gt; <userinput>\set content '''' `sed -e "s/'/''/g" -e 's/\\/\\\\/g' &lt; my_file.txt` ''''</userinput>
2585 </programlisting>
2586 Note the use of different shell quoting conventions so that neither
2587 the single quote marks nor the backslashes are special to the shell.
2588 Backslashes are still special to <command>sed</command>, however, so
2589 we need to double them. (Perhaps
2590 at one point you thought it was great that all Unix commands use the
2591 same escape character.)
2592 </para>
2594 <para>
2595 Since colons can legally appear in SQL commands, the following rule
2596 applies: the character sequence
2597 <quote>:name</quote> is not changed unless <quote>name</> is the name
2598 of a variable that is currently set. In any case you can escape
2599 a colon with a backslash to protect it from substitution. (The
2600 colon syntax for variables is standard <acronym>SQL</acronym> for
2601 embedded query languages, such as <application>ECPG</application>.
2602 The colon syntax for array slices and type casts are
2603 <productname>PostgreSQL</productname> extensions, hence the
2604 conflict.)
2605 </para>
2607 </refsect3>
2609 <refsect3 id="APP-PSQL-prompting">
2610 <title id="APP-PSQL-prompting-title">Prompting</title>
2612 <para>
2613 The prompts <application>psql</application> issues can be customized
2614 to your preference. The three variables <varname>PROMPT1</varname>,
2615 <varname>PROMPT2</varname>, and <varname>PROMPT3</varname> contain strings
2616 and special escape sequences that describe the appearance of the
2617 prompt. Prompt 1 is the normal prompt that is issued when
2618 <application>psql</application> requests a new command. Prompt 2 is
2619 issued when more input is expected during command input because the
2620 command was not terminated with a semicolon or a quote was not closed.
2621 Prompt 3 is issued when you run an <acronym>SQL</acronym>
2622 <command>COPY</command> command and you are expected to type in the
2623 row values on the terminal.
2624 </para>
2626 <para>
2627 The value of the selected prompt variable is printed literally,
2628 except where a percent sign (<literal>%</literal>) is encountered.
2629 Depending on the next character, certain other text is substituted
2630 instead. Defined substitutions are:
2632 <variablelist>
2633 <varlistentry>
2634 <term><literal>%M</literal></term>
2635 <listitem>
2636 <para>
2637 The full host name (with domain name) of the database server,
2638 or <literal>[local]</literal> if the connection is over a Unix
2639 domain socket, or
2640 <literal>[local:<replaceable>/dir/name</replaceable>]</literal>,
2641 if the Unix domain socket is not at the compiled in default
2642 location.
2643 </para>
2644 </listitem>
2645 </varlistentry>
2647 <varlistentry>
2648 <term><literal>%m</literal></term>
2649 <listitem>
2650 <para>
2651 The host name of the database server, truncated at the
2652 first dot, or <literal>[local]</literal> if the connection is
2653 over a Unix domain socket.
2654 </para>
2655 </listitem>
2656 </varlistentry>
2658 <varlistentry>
2659 <term><literal>%&gt;</literal></term>
2660 <listitem><para>The port number at which the database server is listening.</para></listitem>
2661 </varlistentry>
2663 <varlistentry>
2664 <term><literal>%n</literal></term>
2665 <listitem>
2666 <para>
2667 The database session user name. (The expansion of this
2668 value might change during a database session as the result
2669 of the command <command>SET SESSION
2670 AUTHORIZATION</command>.)
2671 </para>
2672 </listitem>
2673 </varlistentry>
2675 <varlistentry>
2676 <term><literal>%/</literal></term>
2677 <listitem><para>The name of the current database.</para></listitem>
2678 </varlistentry>
2680 <varlistentry>
2681 <term><literal>%~</literal></term>
2682 <listitem><para>Like <literal>%/</literal>, but the output is <literal>~</literal>
2683 (tilde) if the database is your default database.</para></listitem>
2684 </varlistentry>
2686 <varlistentry>
2687 <term><literal>%#</literal></term>
2688 <listitem>
2689 <para>
2690 If the session user is a database superuser, then a
2691 <literal>#</literal>, otherwise a <literal>&gt;</literal>.
2692 (The expansion of this value might change during a database
2693 session as the result of the command <command>SET SESSION
2694 AUTHORIZATION</command>.)
2695 </para>
2696 </listitem>
2697 </varlistentry>
2699 <varlistentry>
2700 <term><literal>%R</literal></term>
2701 <listitem>
2702 <para>
2703 In prompt 1 normally <literal>=</literal>, but <literal>^</literal> if
2704 in single-line mode, and <literal>!</literal> if the session is
2705 disconnected from the database (which can happen if
2706 <command>\connect</command> fails). In prompt 2 the sequence is
2707 replaced by <literal>-</literal>, <literal>*</literal>, a single quote,
2708 a double quote, or a dollar sign, depending on whether
2709 <application>psql</application> expects more input because the
2710 command wasn't terminated yet, because you are inside a
2711 <literal>/* ... */</literal> comment, or because you are inside
2712 a quoted or dollar-escaped string. In prompt 3 the sequence doesn't
2713 produce anything.
2714 </para>
2715 </listitem>
2716 </varlistentry>
2718 <varlistentry>
2719 <term><literal>%x</literal></term>
2720 <listitem>
2721 <para>
2722 Transaction status: an empty string when not in a transaction
2723 block, or <literal>*</> when in a transaction block, or
2724 <literal>!</> when in a failed transaction block, or <literal>?</>
2725 when the transaction state is indeterminate (for example, because
2726 there is no connection).
2727 </para>
2728 </listitem>
2729 </varlistentry>
2731 <varlistentry>
2732 <term><literal>%</literal><replaceable class="parameter">digits</replaceable></term>
2733 <listitem>
2734 <para>
2735 The character with the indicated octal code is substituted.
2736 </para>
2737 </listitem>
2738 </varlistentry>
2740 <varlistentry>
2741 <term><literal>%:</literal><replaceable class="parameter">name</replaceable><literal>:</literal></term>
2742 <listitem>
2743 <para>
2744 The value of the <application>psql</application> variable
2745 <replaceable class="parameter">name</replaceable>. See the
2746 section <xref linkend="APP-PSQL-variables"
2747 endterm="APP-PSQL-variables-title"> for details.
2748 </para>
2749 </listitem>
2750 </varlistentry>
2752 <varlistentry>
2753 <term><literal>%`</literal><replaceable class="parameter">command</replaceable><literal>`</literal></term>
2754 <listitem>
2755 <para>
2756 The output of <replaceable
2757 class="parameter">command</replaceable>, similar to ordinary
2758 <quote>back-tick</quote> substitution.
2759 </para>
2760 </listitem>
2761 </varlistentry>
2763 <varlistentry>
2764 <term><literal>%[</literal> ... <literal>%]</literal></term>
2765 <listitem>
2766 <para>
2767 Prompts can contain terminal control characters which, for
2768 example, change the color, background, or style of the prompt
2769 text, or change the title of the terminal window. In order for
2770 the line editing features of <application>Readline</application> to work properly, these
2771 non-printing control characters must be designated as invisible
2772 by surrounding them with <literal>%[</literal> and
2773 <literal>%]</literal>. Multiple pairs of these can occur within
2774 the prompt. For example:
2775 <programlisting>
2776 testdb=&gt; \set PROMPT1 '%[%033[1;33;40m%]%n@%/%R%[%033[0m%]%# '
2777 </programlisting>
2778 results in a boldfaced (<literal>1;</literal>) yellow-on-black
2779 (<literal>33;40</literal>) prompt on VT100-compatible, color-capable
2780 terminals.
2781 </para>
2782 </listitem>
2783 </varlistentry>
2785 </variablelist>
2787 To insert a percent sign into your prompt, write
2788 <literal>%%</literal>. The default prompts are
2789 <literal>'%/%R%# '</literal> for prompts 1 and 2, and
2790 <literal>'&gt;&gt; '</literal> for prompt 3.
2791 </para>
2793 <note>
2794 <para>
2795 This feature was shamelessly plagiarized from
2796 <application>tcsh</application>.
2797 </para>
2798 </note>
2800 </refsect3>
2802 <refsect3>
2803 <title>Command-Line Editing</title>
2805 <para>
2806 <application>psql</application> supports the <application>Readline</application>
2807 library for convenient line editing and retrieval. The command
2808 history is automatically saved when <application>psql</application>
2809 exits and is reloaded when
2810 <application>psql</application> starts up. Tab-completion is also
2811 supported, although the completion logic makes no claim to be an
2812 <acronym>SQL</acronym> parser. If for some reason you do not like the tab completion, you
2813 can turn it off by putting this in a file named
2814 <filename>.inputrc</filename> in your home directory:
2815 <programlisting>
2816 $if psql
2817 set disable-completion on
2818 $endif
2819 </programlisting>
2820 (This is not a <application>psql</application> but a
2821 <application>Readline</application> feature. Read its documentation
2822 for further details.)
2823 </para>
2824 </refsect3>
2825 </refsect2>
2826 </refsect1>
2829 <refsect1>
2830 <title>Environment</title>
2832 <variablelist>
2834 <varlistentry>
2835 <term><envar>COLUMNS</envar></term>
2837 <listitem>
2838 <para>
2839 If <literal>\pset columns</> is zero, controls the
2840 width for the <literal>wrapped</> format and width for determining
2841 if wide output requires the pager.
2842 </para>
2843 </listitem>
2844 </varlistentry>
2846 <varlistentry>
2847 <term><envar>PAGER</envar></term>
2849 <listitem>
2850 <para>
2851 If the query results do not fit on the screen, they are piped
2852 through this command. Typical values are
2853 <literal>more</literal> or <literal>less</literal>. The default
2854 is platform-dependent. The use of the pager can be disabled by
2855 using the <command>\pset</command> command.
2856 </para>
2857 </listitem>
2858 </varlistentry>
2860 <varlistentry>
2861 <term><envar>PGDATABASE</envar></term>
2862 <term><envar>PGHOST</envar></term>
2863 <term><envar>PGPORT</envar></term>
2864 <term><envar>PGUSER</envar></term>
2866 <listitem>
2867 <para>
2868 Default connection parameters (see <xref linkend="libpq-envars">).
2869 </para>
2870 </listitem>
2871 </varlistentry>
2873 <varlistentry>
2874 <term><envar>PSQL_EDITOR</envar></term>
2875 <term><envar>EDITOR</envar></term>
2876 <term><envar>VISUAL</envar></term>
2878 <listitem>
2879 <para>
2880 Editor used by the <command>\e</command> command. The variables
2881 are examined in the order listed; the first that is set is used.
2882 </para>
2883 </listitem>
2884 </varlistentry>
2886 <varlistentry>
2887 <term><envar>SHELL</envar></term>
2889 <listitem>
2890 <para>
2891 Command executed by the <command>\!</command> command.
2892 </para>
2893 </listitem>
2894 </varlistentry>
2896 <varlistentry>
2897 <term><envar>TMPDIR</envar></term>
2899 <listitem>
2900 <para>
2901 Directory for storing temporary files. The default is
2902 <filename>/tmp</filename>.
2903 </para>
2904 </listitem>
2905 </varlistentry>
2906 </variablelist>
2908 <para>
2909 This utility, like most other <productname>PostgreSQL</> utilities,
2910 also uses the environment variables supported by <application>libpq</>
2911 (see <xref linkend="libpq-envars">).
2912 </para>
2914 </refsect1>
2917 <refsect1>
2918 <title>Files</title>
2920 <itemizedlist>
2921 <listitem>
2922 <para>
2923 Before starting up, <application>psql</application> attempts to
2924 read and execute commands from the system-wide
2925 <filename>psqlrc</filename> file and the user's
2926 <filename>~/.psqlrc</filename> file.
2927 (On Windows, the user's startup file is named
2928 <filename>%APPDATA%\postgresql\psqlrc.conf</filename>.)
2929 See <filename><replaceable>PREFIX</>/share/psqlrc.sample</>
2930 for information on setting up the system-wide file. It could be used
2931 to set up the client or the server to taste (using the <command>\set
2932 </command> and <command>SET</command> commands).
2933 </para>
2934 </listitem>
2936 <listitem>
2937 <para>
2938 Both the system-wide <filename>psqlrc</filename> file and the user's
2939 <filename>~/.psqlrc</filename> file can be made version-specific
2940 by appending a dash and the <productname>PostgreSQL</productname>
2941 release number, for example <filename>~/.psqlrc-&version;</filename>.
2942 A matching version-specific file will be read in preference to a
2943 non-version-specific file.
2944 </para>
2945 </listitem>
2947 <listitem>
2948 <para>
2949 The command-line history is stored in the file
2950 <filename>~/.psql_history</filename>, or
2951 <filename>%APPDATA%\postgresql\psql_history</filename> on Windows.
2952 </para>
2953 </listitem>
2954 </itemizedlist>
2955 </refsect1>
2958 <refsect1>
2959 <title>Notes</title>
2961 <itemizedlist>
2962 <listitem>
2963 <para>
2964 In an earlier life <application>psql</application> allowed the
2965 first argument of a single-letter backslash command to start
2966 directly after the command, without intervening whitespace.
2967 As of <productname>PostgreSQL</productname> 8.4 this is no
2968 longer allowed.
2969 </para>
2970 </listitem>
2972 <listitem>
2973 <para>
2974 <application>psql</application> is only guaranteed to work smoothly
2975 with servers of the same version. That does not mean other combinations
2976 will fail outright, but subtle and not-so-subtle problems might come
2977 up. Backslash commands are particularly likely to fail if the
2978 server is of a newer version than <application>psql</> itself. However,
2979 backslash commands of the <literal>\d</> family should work with
2980 servers of versions back to 7.4, though not necessarily with servers
2981 newer than <application>psql</> itself.
2982 </para>
2983 </listitem>
2985 </itemizedlist>
2986 </refsect1>
2989 <refsect1>
2990 <title>Notes for Windows users</title>
2992 <para>
2993 <application>psql</application> is built as a <quote>console
2994 application</>. Since the Windows console windows use a different
2995 encoding than the rest of the system, you must take special care
2996 when using 8-bit characters within <application>psql</application>.
2997 If <application>psql</application> detects a problematic
2998 console code page, it will warn you at startup. To change the
2999 console code page, two things are necessary:
3001 <itemizedlist>
3002 <listitem>
3003 <para>
3004 Set the code page by entering <userinput>cmd.exe /c chcp
3005 1252</userinput>. (1252 is a code page that is appropriate for
3006 German; replace it with your value.) If you are using Cygwin,
3007 you can put this command in <filename>/etc/profile</filename>.
3008 </para>
3009 </listitem>
3011 <listitem>
3012 <para>
3013 Set the console font to <literal>Lucida Console</>, because the
3014 raster font does not work with the ANSI code page.
3015 </para>
3016 </listitem>
3017 </itemizedlist>
3018 </para>
3020 </refsect1>
3023 <refsect1 id="APP-PSQL-examples">
3024 <title id="APP-PSQL-examples-title">Examples</title>
3026 <para>
3027 The first example shows how to spread a command over several lines of
3028 input. Notice the changing prompt:
3029 <programlisting>
3030 testdb=&gt; <userinput>CREATE TABLE my_table (</userinput>
3031 testdb(&gt; <userinput> first integer not null default 0,</userinput>
3032 testdb(&gt; <userinput> second text)</userinput>
3033 testdb-&gt; <userinput>;</userinput>
3034 CREATE TABLE
3035 </programlisting>
3036 Now look at the table definition again:
3037 <programlisting>
3038 testdb=&gt; <userinput>\d my_table</userinput>
3039 Table "my_table"
3040 Attribute | Type | Modifier
3041 -----------+---------+--------------------
3042 first | integer | not null default 0
3043 second | text |
3045 </programlisting>
3046 Now we change the prompt to something more interesting:
3047 <programlisting>
3048 testdb=&gt; <userinput>\set PROMPT1 '%n@%m %~%R%# '</userinput>
3049 peter@localhost testdb=&gt;
3050 </programlisting>
3051 Let's assume you have filled the table with data and want to take a
3052 look at it:
3053 <programlisting>
3054 peter@localhost testdb=&gt; SELECT * FROM my_table;
3055 first | second
3056 -------+--------
3057 1 | one
3058 2 | two
3059 3 | three
3060 4 | four
3061 (4 rows)
3063 </programlisting>
3064 You can display tables in different ways by using the
3065 <command>\pset</command> command:
3066 <programlisting>
3067 peter@localhost testdb=&gt; <userinput>\pset border 2</userinput>
3068 Border style is 2.
3069 peter@localhost testdb=&gt; <userinput>SELECT * FROM my_table;</userinput>
3070 +-------+--------+
3071 | first | second |
3072 +-------+--------+
3073 | 1 | one |
3074 | 2 | two |
3075 | 3 | three |
3076 | 4 | four |
3077 +-------+--------+
3078 (4 rows)
3080 peter@localhost testdb=&gt; <userinput>\pset border 0</userinput>
3081 Border style is 0.
3082 peter@localhost testdb=&gt; <userinput>SELECT * FROM my_table;</userinput>
3083 first second
3084 ----- ------
3085 1 one
3086 2 two
3087 3 three
3088 4 four
3089 (4 rows)
3091 peter@localhost testdb=&gt; <userinput>\pset border 1</userinput>
3092 Border style is 1.
3093 peter@localhost testdb=&gt; <userinput>\pset format unaligned</userinput>
3094 Output format is unaligned.
3095 peter@localhost testdb=&gt; <userinput>\pset fieldsep ","</userinput>
3096 Field separator is ",".
3097 peter@localhost testdb=&gt; <userinput>\pset tuples_only</userinput>
3098 Showing only tuples.
3099 peter@localhost testdb=&gt; <userinput>SELECT second, first FROM my_table;</userinput>
3100 one,1
3101 two,2
3102 three,3
3103 four,4
3104 </programlisting>
3105 Alternatively, use the short commands:
3106 <programlisting>
3107 peter@localhost testdb=&gt; <userinput>\a \t \x</userinput>
3108 Output format is aligned.
3109 Tuples only is off.
3110 Expanded display is on.
3111 peter@localhost testdb=&gt; <userinput>SELECT * FROM my_table;</userinput>
3112 -[ RECORD 1 ]-
3113 first | 1
3114 second | one
3115 -[ RECORD 2 ]-
3116 first | 2
3117 second | two
3118 -[ RECORD 3 ]-
3119 first | 3
3120 second | three
3121 -[ RECORD 4 ]-
3122 first | 4
3123 second | four
3124 </programlisting>
3125 </para>
3127 </refsect1>
3129 </refentry>