psql - Unix, Linux Command

psql [ option... ]  [ dbname

 [ username ]  ]


psql is a terminal-based front-end to
PostgreSQL. It enables you to type in
queries interactively, issue them to
PostgreSQL, and see the query results.
Alternatively, input can be from a file. In addition, it provides a
number of meta-commands and various shell-like features to
facilitate writing scripts and automating a wide variety of tasks.


command must be either
a command string that is completely parsable by the server (i.e.,
it contains no psql specific features),
or a single backslash command. Thus you cannot mix
SQL and psql
meta-commands. To achieve that, you could pipe the string into
psql, like this: echo "\x \\
select * from foo;" | psql.


If the command string contains multiple SQL commands, they are
processed in a single transaction, unless there are explicit
BEGIN/COMMIT commands included in the string to divide it into
multiple transactions. This is different from the behavior when
the same string is fed to psql’s standard input.


If filename is -
(hyphen), then standard input is read.


Using this option is subtly different from writing psql
< filename. In general,
both will do what you expect, but using -f
enables some nice features such as error messages with line
numbers. There is also a slight chance that using this option will
reduce the start-up overhead. On the other hand, the variant using
the shell’s input redirection is (in theory) guaranteed to yield
exactly the same output that you would have gotten had you entered
everything by hand.


Note: This mode is provided for those who insist on it, but you are not
necessarily encouraged to use it. In particular, if you mix
SQL and meta-commands on a line the order of
execution might not always be clear to the inexperienced user.




This option is deprecated, as it is conceptually flawed.
(Prompting for a non-default user name and prompting for a
password because the server requires it are really two different
things.) You are encouraged to look at the -U and
-W options instead.


psql should automatically prompt for a
password whenever the server requests password authentication.
However, currently password request detection is not totally
reliable, hence this option to force a prompt. If no password
prompt is issued and the server requires password authentication,
the connection attempt will fail.


This option will remain set for the entire session, even if you
change the database connection with the meta-command
\connect.


psql returns 0 to the shell if it
finished normally, 1 if a fatal error of its own (out of memory,
file not found) occurs, 2 if the connection to the server went bad
and the session was not interactive, and 3 if an error occurred in a
script and the variable ON_ERROR_STOP was set.


psql is a regular
PostgreSQL client application. In order
to connect to a database you need to know the name of your target
database, the host name and port number of the server and what user
name you want to connect as. psql can be
told about those parameters via command line options, namely
-d, -h, -p, and
-U respectively. If an argument is found that does
not belong to any option it will be interpreted as the database name
(or the user name, if the database name is already given). Not all
these options are required; there are useful defaults. If you omit the host
name, psql will connect via a Unix-domain socket
to a server on the local host, or via TCP/IP to localhost on
machines that don’t have Unix-domain sockets. The default port number is
determined at compile time.
Since the database server uses the same default, you will not have
to specify the port in most cases. The default user name is your
Unix user name, as is the default database name. Note that you can’t
just connect to any database under any user name. Your database
administrator should have informed you about your access rights.


When the defaults aren’t quite right, you can save yourself
some typing by setting the environment variables
PGDATABASE, PGHOST,
PGPORT and/or PGUSER to appropriate
values. (For additional environment variables, see the documentation.) It is also convenient to have a
~/.pgpass file to avoid regularly having to type in
passwords. See the documentation for more information.


If the connection could not be made for any reason (e.g., insufficient
privileges, server is not running on the targeted host, etc.),
psql will return an error and terminate.


In normal operation, psql provides a
prompt with the name of the database to which
psql is currently connected, followed by
the string =>. For example,



$ psql testdb
Welcome to psql 8.1.22, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

testdb=>



Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit


testdb=>




At the prompt, the user may type in SQL commands.
Ordinarily, input lines are sent to the server when a
command-terminating semicolon is reached. An end of line does not
terminate a command. Thus commands can be spread over several lines for
clarity. If the command was sent and executed without error, the results
of the command are displayed on the screen.


Whenever a command is executed, psql also polls
for asynchronous notification events generated by
LISTEN [listen(7)] and
NOTIFY [notify(7)].


Anything you enter in psql that begins
with an unquoted backslash is a psql
meta-command that is processed by psql
itself. These commands help make
psql more useful for administration or
scripting. Meta-commands are more commonly called slash or backslash
commands.


The format of a psql command is the backslash,
followed immediately by a command verb, then any arguments. The arguments
are separated from the command verb and each other by any number of
whitespace characters.


To include whitespace into an argument you may quote it with a
single quote. To include a single quote into such an argument,
precede it by a backslash. Anything contained in single quotes is
furthermore subject to C-like substitutions for
\n (new line), \t (tab),
\digits (octal), and
\xdigits (hexadecimal).


If an unquoted argument begins with a colon (:),
it is taken as a psql variable and the value of the
variable is used as the argument instead.


Arguments that are enclosed in backquotes (‘)
are taken as a command line that is passed to the shell. The
output of the command (with any trailing newline removed) is taken
as the argument value. The above escape sequences also apply in
backquotes.


Some commands take an SQL identifier (such as a
table name) as argument. These arguments follow the syntax rules
of SQL: Unquoted letters are forced to
lowercase, while double quotes (") protect letters
from case conversion and allow incorporation of whitespace into
the identifier. Within double quotes, paired double quotes reduce
to a single double quote in the resulting name. For example,
FOO"BAR"BAZ is interpreted as fooBARbaz,
and "A weird"" name" becomes A weird"
name.


Parsing for arguments stops when another unquoted backslash occurs.
This is taken as the beginning of a new meta-command. The special
sequence \\ (two backslashes) marks the end of
arguments and continues parsing SQL commands, if
any. That way SQL and
psql commands can be freely mixed on a
line. But in any case, the arguments of a meta-command cannot
continue beyond the end of the line.


The following meta-commands are defined:


Tip: To print your current working directory, use \! pwd.




If username is
omitted the current user name is assumed.


As a special rule, \connect without any
arguments will connect to the default database as the default
user (as you would have gotten by starting
psql without any arguments).


If the connection attempt failed (wrong user name, access
denied, etc.), the previous connection will be kept if and only
if psql is in interactive mode. When
executing a non-interactive script, processing will immediately
stop with an error. This distinction was chosen as a user
convenience against typos on the one hand, and a safety
mechanism that scripts are not accidentally acting on the wrong
database on the other hand.


The syntax of the command is similar to that of the
SQL COPY [copy(7)] command. Note that, because of this,
special parsing rules apply to the \copy
command. In particular, the variable substitution rules and
backslash escapes do not apply.


\copy table from stdin | stdout
reads/writes based on the command input and output respectively.
All rows are read from the same source that issued the command,
continuing until \. is read or the stream
reaches EOF. Output is sent to the same place as
command output. To read/write from
psql’s standard input or output, use
pstdin or pstdout. This option is useful
for populating tables in-line within a SQL script file.


Tip: This operation is not as efficient as the SQL
COPY command because all data must pass
through the client/server connection. For large
amounts of data the SQL command may be preferable.




The command form \d+ is identical, except that
more information is displayed: any comments associated with the
columns of the table are shown, as is the presence of OIDs in the
table.


Note: If \d is used without a
pattern argument, it is
equivalent to \dtvs which will show a list of
all tables, views, and sequences. This is purely a convenience
measure.





=> \dd version
                     Object descriptions
   Schema   |  Name   |  Object  |        Description
------------+---------+----------+---------------------------
 pg_catalog | version | function | PostgreSQL version string
(1 row)





Descriptions for objects can be created with the COMMENT [comment(7)]
SQL command.


Note: 

To look up functions taking argument or returning values of a specific
type, use your pager’s search capability to scroll through the \df
output.


To reduce clutter, \df does not show data type I/O
functions. This is implemented by ignoring functions that accept
or return type cstring.




If pattern is
specified, only objects whose names match the pattern are listed.


The commands GRANT and
REVOKE are used to set access privileges.
See GRANT [grant(7)]
for more information.


The new query buffer is then re-parsed according to the normal
rules of psql, where the whole buffer
is treated as a single line. (Thus you cannot make scripts this
way. Use \i for that.) This means also that
if the query ends with (or rather contains) a semicolon, it is
immediately executed. In other cases it will merely wait in the
query buffer.


Tip: psql searches the environment
variables PSQL_EDITOR, EDITOR, and
VISUAL (in that order) for an editor to use. If
all of them are unset, vi is used on Unix
systems, notepad.exe on Windows systems.





=> \echo ‘date‘
Tue Oct 26 21:40:57 CEST 1999





Tip: If you use the \o command to redirect your
query output you may wish to use \qecho
instead of this command.




Note: To simplify typing, commands that consists of several words do
not have to be quoted. Thus it is fine to type \help
alter table.




Note: If you want to see the lines on the screen as they are read you
must set the variable ECHO to
all.




Tip: Use \lo_list to find out the large object’s
OID.





foo=> \lo_import ’/home/peter/pictures/photo.xcf’ ’a picture of me’
lo_import 152801





Note that this command is subtly different from the server-side
lo_import because it acts as the local user
on the local file system, rather than the server’s user and file
system.


Tip: Use \lo_list to find out the large object’s
OID.




‘‘Query results’’ includes all tables, command
responses, and notices obtained from the database server, as
well as output of various backslash commands that query the
database (such as \d), but not error
messages.


Tip: To intersperse text output in between query results, use
\qecho.




Adjustable printing options are:


‘‘Unaligned’’ writes all columns of a row on a
line, separated by the currently active field separator. This
is intended to create output that might be intended to be read
in by other programs (tab-separated, comma-separated).
‘‘Aligned’’ mode is the standard, human-readable,
nicely formatted text output that is default. The
‘‘HTML’’ and
‘‘LaTeX’’ modes put out tables that are intended to
be included in documents using the respective mark-up
language. They are not complete documents! (This might not be
so dramatic in HTML, but in LaTeX you must
have a complete document wrapper.)


Expanded mode is supported by all four output formats.


When the pager is off, the pager is not used. When the pager
is on, the pager is used only when appropriate, i.e. the
output is to a terminal and will not fit on the screen.
(psql does not do a perfect job of estimating
when to use the pager.) \pset pager turns the
pager on and off. Pager can also be set to always,
which causes the pager to be always used.


Illustrations on how these different formats look can be seen in
the Examples [psql(1)] section.






Note: It is an error to call \pset without
arguments. In the future this call might show the current status
of all printing options.




Valid variable names can contain characters, digits, and
underscores. See the section Variables [psql(1)] below for details.
Variable names are case-sensitive.


Although you are welcome to set any variable to anything you
want, psql treats several variables
as special. They are documented in the section about variables.


Note: This command is totally separate from the SQL
command SET [set(7)].




The commands GRANT and
REVOKE are used to set access privileges.
See GRANT [grant(7)] for
more information.


This is an alias for \dp (‘‘display
privileges’’).


The various \d commands accept a pattern parameter to specify the
object name(s) to be displayed. * means ‘‘any
sequence of characters’’ and ? means ‘‘any single
character’’. (This notation is comparable to Unix shell file name
patterns.) Advanced users can also use regular-expression
notations such as character classes, for example [0-9]
to match ‘‘any digit’’. To make any of these
pattern-matching characters be interpreted literally, surround it
with double quotes.


A pattern that contains an (unquoted) dot is interpreted as a schema
name pattern followed by an object name pattern. For example,
\dt foo*.bar* displays all tables in schemas whose name
starts with foo and whose table name
starts with bar. If no dot appears, then the pattern
matches only objects that are visible in the current schema search path.


Whenever the pattern parameter
is omitted completely, the \d commands display all objects
that are visible in the current schema search path. To see all objects
in the database, use the pattern *.*.


psql provides variable substitution
features similar to common Unix command shells.
Variables are simply name/value pairs, where the value
can be any string of any length. To set variables, use the
psql meta-command
\set:



testdb=> \set foo bar






testdb=> \echo :foo
bar





Note: The arguments of \set are subject to the same
substitution rules as with other commands. Thus you can construct
interesting references such as \set :foo
’something’ and get ‘‘soft links’’ or
‘‘variable variables’’ of Perl
or PHP fame,
respectively. Unfortunately (or fortunately?), there is no way to do
anything useful with these constructs. On the other hand,
\set bar :foo is a perfectly valid way to copy a
variable.




If you call \set without a second argument, the
variable is set, with an empty string as value. To unset (or delete) a
variable, use the command \unset.


psql’s internal variable names can
consist of letters, numbers, and underscores in any order and any
number of them. A number of these variables are treated specially
by psql. They indicate certain option
settings that can be changed at run time by altering the value of
the variable or represent some state of the application. Although
you can use these variables for any other purpose, this is not
recommended, as the program behavior might grow really strange
really quickly. By convention, all specially treated variables
consist of all upper-case letters (and possibly numbers and
underscores). To ensure maximum compatibility in the future, avoid
using such variable names for your own purposes. A list of all specially
treated variables follows.




Note: In autocommit-off mode, you must explicitly abandon any failed
transaction by entering ABORT or ROLLBACK.
Also keep in mind that if you exit the session
without committing, your work will be lost.




Note: The autocommit-on mode is PostgreSQL’s traditional
behavior, but autocommit-off is closer to the SQL spec. If you
prefer autocommit-off, you may wish to set it in the system-wide
psqlrc file or your
~/.psqlrc file.




Note: This feature was shamelessly plagiarized from
Bash.





\set HISTFILE ~/.psql_history- :DBNAME





Note: This feature was shamelessly plagiarized from
Bash.




Note: This feature was shamelessly plagiarized from
Bash.




Note: This feature was shamelessly plagiarized from
Bash.






An additional useful feature of psql
variables is that you can substitute (‘‘interpolate’’)
them into regular SQL statements. The syntax for
this is again to prepend the variable name with a colon
(:).



testdb=> \set foo ’my_table’
testdb=> SELECT * FROM :foo;





A popular application of this facility is to refer to the last
inserted OID in subsequent statements to build a
foreign key scenario. Another possible use of this mechanism is to
copy the contents of a file into a table column. First load the file into a
variable and then proceed as above.



testdb=> \set content ’#146;’ ‘cat my_file.txt‘ ’#146;’
testdb=> INSERT INTO my_table VALUES (:content);






testdb=> \set content ’#146;’ ‘sed -e "s/’/\\\\\#146;/g" < my_file.txt‘ ’#146;’





Since colons may legally appear in SQL commands, the following rule
applies: the character sequence
‘‘:name’’ is not changed unless ‘‘name’’ is the name
of a variable that is currently set. In any case you can escape
a colon with a backslash to protect it from substitution. (The
colon syntax for variables is standard SQL for
embedded query languages, such as ECPG.
The colon syntax for array slices and type casts are
PostgreSQL extensions, hence the
conflict.)


The prompts psql issues can be customized
to your preference. The three variables PROMPT1,
PROMPT2, and PROMPT3 contain strings
and special escape sequences that describe the appearance of the
prompt. Prompt 1 is the normal prompt that is issued when
psql requests a new command. Prompt 2 is
issued when more input is expected during command input because the
command was not terminated with a semicolon or a quote was not closed.
Prompt 3 is issued when you run an SQL
COPY command and you are expected to type in the
row values on the terminal.


The value of the selected prompt variable is printed literally,
except where a percent sign (%) is encountered.
Depending on the next character, certain other text is substituted
instead. Defined substitutions are:



testdb=> \set PROMPT1 ’%[%033[1;33;40m%]%n@%/%R%[%033[0m%#%] ’









psql supports the Readline
library for convenient line editing and retrieval. The command
history is automatically saved when psql
exits and is reloaded when
psql starts up. Tab-completion is also
supported, although the completion logic makes no claim to be an
SQL parser. If for some reason you do not like the tab completion, you
can turn it off by putting this in a file named
.inputrc in your home directory:



$if psql
set disable-completion on
$endif






testdb=> \foo
Field separator is "oo".





psql is built as a ‘‘console
application’’. Since the Windows console windows use a different
encoding than the rest of the system, you must take special care
when using 8-bit characters within psql.
If psql detects a problematic
console code page, it will warn you at startup. To change the
console code page, two things are necessary:


The first example shows how to spread a command over several lines of
input. Notice the changing prompt:



testdb=> CREATE TABLE my_table (
testdb(>  first integer not null default 0,
testdb(>  second text)
testdb-> ;
CREATE TABLE






testdb=> \d my_table
             Table "my_table"
 Attribute |  Type   |      Modifier
-----------+---------+--------------------
 first     | integer | not null default 0
 second    | text    |






testdb=> \set PROMPT1 ’%n@%m %~%R%# ’
peter@localhost testdb=>






peter@localhost testdb=> SELECT * FROM my_table;
 first | second
-------+--------
     1 | one
     2 | two
     3 | three
     4 | four
(4 rows)






peter@localhost testdb=> \pset border 2
Border style is 2.
peter@localhost testdb=> SELECT * FROM my_table;
+-------+--------+
| first | second |
+-------+--------+
|     1 | one    |
|     2 | two    |
|     3 | three  |
|     4 | four   |
+-------+--------+
(4 rows)

peter@localhost testdb=> \pset border 0
Border style is 0.
peter@localhost testdb=> SELECT * FROM my_table;
first second
----- ------
    1 one
    2 two
    3 three
    4 four
(4 rows)

peter@localhost testdb=> \pset border 1
Border style is 1.
peter@localhost testdb=> \pset format unaligned
Output format is unaligned.
peter@localhost testdb=> \pset fieldsep ","
Field separator is ",".
peter@localhost testdb=> \pset tuples_only
Showing only tuples.
peter@localhost testdb=> SELECT second, first FROM my_table;
one,1
two,2
three,3
four,4



peter@localhost testdb=> \pset border 0
Border style is 0.
peter@localhost testdb=> SELECT * FROM my_table;
first second
----- ------
    1 one
    2 two
    3 three
    4 four
(4 rows)


peter@localhost testdb=> \pset border 1
Border style is 1.
peter@localhost testdb=> \pset format unaligned
Output format is unaligned.
peter@localhost testdb=> \pset fieldsep ","
Field separator is ",".
peter@localhost testdb=> \pset tuples_only
Showing only tuples.
peter@localhost testdb=> SELECT second, first FROM my_table;
one,1
two,2
three,3
four,4





peter@localhost testdb=> \a \t \x
Output format is aligned.
Tuples only is off.
Expanded display is on.
peter@localhost testdb=> SELECT * FROM my_table;
-[ RECORD 1 ]-
first  | 1
second | one
-[ RECORD 2 ]-
first  | 2
second | two
-[ RECORD 3 ]-
first  | 3
second | three
-[ RECORD 4 ]-
first  | 4
second | four





Advertisements


    129 Lectures 
     23 hours 

 Eduonix Learning Solutions

    5 Lectures 
     4.5 hours 

 Frahaan Hussain

    35 Lectures 
     2 hours 

 Pradeep D

    41 Lectures 
     2.5 hours 

 Musab Zayadneh

    46 Lectures 
     4 hours 

 GUHARAJANM

    6 Lectures 
     4 hours 

 Uplatz
 Print
 Add Notes
 Bookmark this page