文章目录

        运行 psql 工具
        连接数据库
            查看当前连接信息
            切换数据库连接
            查看/设置客户端编码
            修改用户密码
        查看帮助信息
            psql 命令帮助
            psql 命令行选项帮助
            psql 配置变量帮助
            SQL 语句帮助
        退出 psql 工具
        常用元命令
            执行 SQL 语句
            保存查询结果
            重复执行语句
            显示/清空查询缓冲区
            编辑/保存查询缓冲区
            执行上一次命令
            查看/保存命令历史
            显示语句执行时间
            设置输出格式
            执行脚本文件
            显示详细错误信息
        查看数据库对象信息
            查看角色和用户
            查看数据库
            查看模式
            查看表空间
            查看表
            查看索引
            查看序列
            查看/编辑视图
            查看/编辑函数和过程
        高级功能
            设置变量
            SQL 替换
            条件执行命令
            执行操作系统命令
            处理大对象

psql 是 PostgreSQL 官方提供的命令行客户端工具,支持交互式的查询和脚本命令。同时,psql 还提供了大量的元命令(meta-command)以及许多类似 shell 的功能,可以方便我们编写脚本和实现各种任务的自动化。

无论是 DBA 还是开发人员,psql 都是和 PostgreSQL 数据库交互必不可少的工具之一;因此,本文就来详细介绍一下它的使用方法和常用命令。
运行 psql 工具

简单来说,运行 psql 工具的命令如下:

psql [option...] [dbname [username]]

   

其中,option 用于指定各种命令行选项,下文将会详细进行介绍;dbname 是连接的数据库名;username 是连接数据库的用户名。

执行psql -?或者psql --help命令可以获取运行 psql 工具的帮助:

[tony@sqlhost ~]> psql --help
psql is the PostgreSQL interactive terminal.

Usage:
  psql [OPTION]... [DBNAME [USERNAME]]

General options:
  -c, --command=COMMAND    run only single command (SQL or internal) and exit
  -d, --dbname=DBNAME      database name to connect to (default: "tony")
  -f, --file=FILENAME      execute commands from file, then exit
  -l, --list               list available databases, then exit
  -v, --set=, --variable=NAME=VALUE
                           set psql variable NAME to VALUE
                           (e.g., -v ON_ERROR_STOP=1)
  -V, --version            output version information, then exit
  -X, --no-psqlrc          do not read startup file (~/.psqlrc)
  -1 ("one"), --single-transaction
                           execute as a single transaction (if non-interactive)
  -?, --help[=options]     show this help, then exit
      --help=commands      list backslash commands, then exit
      --help=variables     list special variables, then exit

Input and output options:
  -a, --echo-all           echo all input from script
  -b, --echo-errors        echo failed commands
  -e, --echo-queries       echo commands sent to server
  -E, --echo-hidden        display queries that internal commands generate
  -L, --log-file=FILENAME  send session log to file
  -n, --no-readline        disable enhanced command line editing (readline)
  -o, --output=FILENAME    send query results to file (or |pipe)
  -q, --quiet              run quietly (no messages, only query output)
  -s, --single-step        single-step mode (confirm each query)
  -S, --single-line        single-line mode (end of line terminates SQL command)

Output format options:
  -A, --no-align           unaligned table output mode
      --csv                CSV (Comma-Separated Values) table output mode
  -F, --field-separator=STRING
                           field separator for unaligned output (default: "|")
  -H, --html               HTML table output mode
  -P, --pset=VAR[=ARG]     set printing option VAR to ARG (see \pset command)
  -R, --record-separator=STRING
                           record separator for unaligned output (default: newline)
  -t, --tuples-only        print rows only
  -T, --table-attr=TEXT    set HTML table tag attributes (e.g., width, border)
  -x, --expanded           turn on expanded table output
  -z, --field-separator-zero
                           set field separator for unaligned output to zero byte
  -0, --record-separator-zero
                           set record separator for unaligned output to zero byte

Connection options:
  -h, --host=HOSTNAME      database server host or socket directory (default: "local socket")
  -p, --port=PORT          database server port (default: "5432")
  -U, --username=USERNAME  database user name (default: "tony")
  -w, --no-password        never prompt for password
  -W, --password           force password prompt (should happen automatically)

For more information, type "\?" (for internal commands) or "\help" (for SQL
commands) from within psql, or consult the psql section in the PostgreSQL
documentation.

Report bugs to <pgsql-bugs@lists.postgresql.org>.

  
  

接下来我们详细介绍一下这些选项的作用。
连接数据库

使用 psql 连接 PostgreSQL 数据库的选项如下:

    -h hostname或者--host=hostname,数据库服务器主机地址或者本机 socket 目录,默认为 local socket 或者 localhost;
    -p port或者--port=port,数据库服务的监听端口,默认为 5432;
    -U username或者--username=username,数据库用户名,默认为操作系统当前用户;
    -w或者--no-password,不提示输入密码,如果没有提供其他认证方式(例如 .pgpass 文件)可能会连接失败。通常用于执行批处理任务和脚本;
    -W或者--password,强制提示输入密码,如果服务器要求密码认证,即使不指定该参数也会提示输入密码;
    -d dbname或者--dbname=dbname,连接的数据库,默认和用户名相同。该参数等价于 psql 命令后第一个非选项形式的参数 dbname。

例如,以下命令使用 postgres 用户连接到主机 192.168.56.104、端口 5432 的 hrdb 数据库:

[tony@sqlhost ~]> psql -h 192.168.56.104 -p 5432 -U postgres hrdb
Password for user postgres:
psql (12.4)
Type "help" for help.

hrdb=#

以下命令使用操作系统用户(postgres)通过 Unix 套接字连接到本机上的 postgres 数据库:

-bash-4.2$ whoami
postgres
-bash-4.2$ psql
psql (12.4)
Type "help" for help.

postgres=#

  

另一种指定连接参数的方法是使用 conninfo 字符串或者 URI 替代数据库名。例如:

[tony@sqlhost ~]> psql "host=192.168.56.104 user=tony password=tony port=5432 dbname=hrdb"
psql (12.4)
Type "help" for help.

hrdb=> \q

[tony@sqlhost ~]> psql postgresql://192.168.56.104:5432/hrdb?user=tony
Password for user tony:
psql (12.4)
Type "help" for help.

hrdb=>

  

查看当前连接信息

成功建立连接之后,可以使用元命令\conninfo查看当前连接信息:

hrdb=> \conninfo
You are connected to database "hrdb" as user "tony" on host "192.168.56.104" at port "5432".

  

切换数据库连接

使用元命令\c可以重新连接数据库:

\c[onnect] [ dbname [ username ] [ host ] [ port ] | conninfo ]

  

以上参数如果省略,将会重用原有连接的参数值。例如: