psql
是 PostgreSQL 的标准命令行 客户端应用程序,并且是大多数 PostgreSQL 安装的标准部分。它既可以用于基于终端的纯文本与 PostgreSQL 服务器交互,也可以用于促进基于脚本的自动化任务。
psql
从 PostgreSQL 项目开始就一直是其核心部分,通常存在于 PostgreSQL 安装中。它也可以作为独立应用程序安装,许多操作系统/发行版为 PostgreSQL 服务器本身以及核心客户端应用程序提供单独的软件包。psql
当然也已移植到 Windows,但存在某些限制,特别是 readline 支持。
psql
可以通过 Unix 域套接字(如果可用)连接到同一服务器上的 PostgreSQL 实例,或通过 TCP/IP 连接到在本地或远程服务器上运行的 PostgreSQL。
与 psql
最基本的交互是连接到 PostgreSQL 服务器并发出 SQL 命令,例如:
postgres$ psql psql (13.2) Type "help" for help. postgres=# SELECT 'hello world'; ?column? ------------- hello world (1 row)
psql
还提供了大量元命令(所谓的 斜杠命令)和其他功能,使其成为操作 SQL 的强大工具,并使直接使用 PostgreSQL 后端变得更加容易。
psql
还可以用于从另一个进程管道传输原始 SQL,以及执行包含 SQL 和 psql
元命令的脚本。
psql
的默认配置文件是 .psqlrc
;如果附加了 PostgreSQL 次要版本或主要版本(PostgreSQL 9.2 及更高版本)号(例如 .psqlrc-9.6.6
或 .psqlrc-11
),则如果该文件与 psql
版本匹配,则会解释该文件。
向后兼容性
psql
旨在与旧版本的 PostgreSQL 一起使用;截至 PostgreSQL 15,支持的版本可追溯到 PostgreSQL 9.2;请参阅 src/bin/psql/describe.c 中的注释。
psql
可以连接到运行较新 PostgreSQL 版本的服务器并执行基本查询,但是应尽可能避免这种情况,因为某些功能(尤其是元数据查询)可能不可用或可能无法正常运行。
更改历史记录
此列表列出了每个版本中 psql
的重要功能更改;有关完整详细信息,请参阅每个版本的链接版本说明。
- PostgreSQL 17
- PostgreSQL 16
- 添加了
\drg
命令(提交 0a1d2a7d) - 添加了
\pset
选项xheader_width
(提交 a45388d6) - 现在,在 分区表 上的
\d+
指示外部分区(提交 bd95816f) - 添加了
\bind
命令以设置查询参数并使用扩展查询协议(提交 5b66de34) - 添加了
\dpS
和\zS
命令(提交 d913928c) \df+
显示“内部名称
”而不是“源代码
”(提交 3dfae91f)- 添加了
SHELL_ERROR
和SHELL_EXIT_CODE
魔术变量(提交 b0d8f2d9 和 31ae2aa9) - 将可选执行计数限制添加到
\watch
命令(提交 00beecfe)
- 添加了
- PostgreSQL 15
- PostgreSQL 14
- PostgreSQL 13 (psql 版本说明)
- 添加了
\warn
命令(提交 02e95a50) - 添加了以下与运算符相关的 斜杠命令(提交 b0b5e20c)
\dAc
- 列出运算符类\dAf
- 列出运算符族\dAo
- 列出运算符族的运算符\dAp
- 列出运算符族的过程
\d+
现在显示对象是永久的、临时的还是未记录的(提交 9a2ea618)- 改进了 TOAST 表的
\d
输出(提交 eb5472da) \e
现在将未终止的查询插入到 psql 的查询缓冲区中,从而可以在提交之前查看或进一步编辑查询(提交 d1c866e5)\g
和\gx
可以接受其他格式选项,例如\g (format=csv csv_fieldsep=',')
(提交 b63c293b)- 添加了“不可见”的
PROMPT2
提示配置选项%w
(提交 7f338369)。 - 默认情况下,
PROMPT1
和PROMPT2
中包含%x
以显示事务状态(提交 dcdbb5a5)。
- 添加了
- PostgreSQL 12(psql 发布说明)。
- PostgreSQL 11(psql 发布说明)。
- PostgreSQL 10(psql 发布说明)。
- PostgreSQL 9.6(psql 发布说明)。
- 添加了对多个和混合
-c
和-f
选项的支持(提交 d5563d7d)。 - 添加了
\crosstabview
,它以交叉表格式打印查询结果(初始提交 c09b18f2)。 - 添加了
\errverbose
命令,它以完全详细程度显示最后一个服务器错误(提交 3cc38ca7)。 - 添加了用于编辑/显示视图定义的
\ev
和\sv
命令(提交 8eb6407a)。 - 添加了
\gexec
命令,它执行查询并将结果作为新查询重新提交(提交 2bbe9112)。 - 制表符补全现在考虑整个查询,而不仅仅是当前行(提交 d854118c)。
- 添加了提示选项
%p
,它显示已连接后端的PID(提交 275f05c9)。 - 可以通过新的变量
SHOW_CONTEXT
控制消息的CONTEXT
字段的显示(提交 0426f349)。 - 在
\connect
命令中添加了--reuse-previous
选项(提交 9d924e9a)。
- 添加了对多个和混合
- PostgreSQL 9.5(psql 发布说明)。
- PostgreSQL 9.4(psql 发布说明)。
- PostgreSQL 9.3(psql 发布说明)。
- PostgreSQL 9.2(psql 发布说明)。
- PostgreSQL 9.1(psql 发布说明)。
- PostgreSQL 8.4
- 添加了
\ef
命令(提交 2c863ca8)。
- 添加了
- PostgreSQL 8.0
- 能够处理文件名中的波浪号用户扩展(提交 55a92063)。
- PostgreSQL 7.4
- PostgreSQL 7.3
- PostgreSQL 7.0
- 添加了制表符补全支持(提交 78bc83fe)。
- PostgreSQL 6.3
- PostgreSQL 6.1
- PostgreSQL 6.0
\copy
命令已添加(提交 7870c5a0)
参考文献
- PostgreSQL 文档: psql
有用链接
- psql 提示 - Lætitia AVROT 提供的 100 多条 psql 提示
- psql 中的变量,如何使用它们? - depesz 于 2023 年 5 月发表的博客文章
- psql 中的 gexec:PostgreSQL 高级用户实践 - Julian Markwort / CyberTec 于 2022 年 7 月发表的博客文章