文章目录
运行 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
接下来我们详细介绍一下这些选项的作用。
连接数据库
使用 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 ]
以上参数如果省略,将会重用原有连接的参数值。例如:
更多请见:http://www.mark-to-win.com/tutorial/51610.html