psql 是PostgreSQL的标准命令行客户端应用程序,也是大多数PostgreSQL安装的标准组件。它既可以用于与PostgreSQL服务器进行基于终端的纯文本交互,也可以用于促进自动化脚本任务。
psql 自项目 inception 以来一直是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 19
- 添加了变量
SERVICEFILE(提交 6b1c4d32)
- 添加了变量
- PostgreSQL 18
- 在
psql中添加了支持扩展协议用法的以下命令(提交 d55322b0)\parse\bind_named\close_prepared(最初命名为\close,但在提交 fc39b286 中重命名)
- 添加了变量
SERVICE和提示配置选项%s,提供有关服务名称的信息(如果可用)(提交 477728b5) - 可以在列表命令后附加
x以强制扩展模式(提交 00f4c295) - 在
\df+、\do+、\dAo+和\dC+命令的输出中添加了leakproof指示符(提交 2355e511) - 添加了对管道的支持,提供了以下命令(提交 41625ab8)
\startpipeline\endpipeline\syncpipeline\flush\flushrequest\getresults
- 展开了
\conninfo的输出(提交 bba2fbc6) - 添加了管道状态提示配置选项
%P和状态变量PIPELINE_SYNC_COUNT、PIPELINE_COMMAND_COUNT和PIPELINE_RESULT_COUNT(提交 3ce35758) - 添加了
\sendpipeline斜杠命令(提交 17caf664) \dx现在显示默认扩展版本(提交 d696406a)\watch的默认间隔现在可以配置(提交 1a759c83)
- 在
- 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 月的博客文章
