psql

PostgreSQL 的标准命令行客户端

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
    • 添加了 \drg 命令(提交 d65ddaca
    • min_rows 参数添加到 \watch 命令(提交 f347ec76
    • 改进了默认和空权限显示(提交 d1379ebf
    • 现在可以通过 SIGINT 取消数据库重新连接(提交 cafe1056
  • PostgreSQL 16
    • 添加了 \drg 命令(提交 0a1d2a7d
    • 添加了 \pset 选项 xheader_width(提交 a45388d6
    • 现在,在 分区表 上的 \d+ 指示外部分区(提交 bd95816f
    • 添加了 \bind 命令以设置查询参数并使用扩展查询协议(提交 5b66de34
    • 添加了 \dpS\zS 命令(提交 d913928c
    • \df+ 显示“内部名称”而不是“源代码”(提交 3dfae91f
    • 添加了 SHELL_ERRORSHELL_EXIT_CODE 魔术变量(提交 b0d8f2d931ae2aa9
    • 将可选执行计数限制添加到 \watch 命令(提交 00beecfe
  • PostgreSQL 15
    • 新的环境变量 PSQL_WATCH_PAGER 用于为 psql\watch 命令设置分页器(提交 7c09d279
    • 添加了 \getenv 斜杠命令(提交 33d3eead
    • \lo_list/\dl 现在在提供 + 选项时显示 大对象 的 ACL(提交 328dfbda
    • 默认情况下显示多个查询的结果;添加了变量 SHOW_ALL_RESULTS 来控制此行为(提交 7844c991
    • 添加了 \dconfig 斜杠命令(提交 3e707fbb
    • 改进了 \copy 的性能(提交 eec57115
    • 删除了对 PostgreSQL 9.2 之前版本的支持(提交 cf0cab86
  • PostgreSQL 14
    • 添加了 \dX 命令以显示添加的扩展统计对象(提交 ad600bba
    • \di\dm\dt 命令现在显示 访问方法 名称(提交 07f386ed
    • 如果命令字符串包含多个查询,则默认情况下显示所有查询结果(提交 3a513067
    • 添加了 SHOW_ALL_RESULTS 变量(提交 3a513067
    • \df\do 命令现在接受参数类型的规范(提交 a3027e1e
  • 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)。
    • 默认情况下,PROMPT1PROMPT2中包含%x以显示事务状态(提交 dcdbb5a5)。
  • PostgreSQL 12psql 发布说明)。
    • 添加了\dP命令以列出分区表和索引(提交 1c5d9270)。
    • CSV添加了表输出模式和--csv选项(提交 aa2ba50c)。
    • psql\help输出中显示指向在线手册页面的链接(提交 27f3dea6)。
    • 特殊变量VERBOSITY现在接受值sqlstate(提交 7bac3aca)。
  • PostgreSQL 11psql 发布说明)。
    • 添加了\gdesc命令(提交 49ca462e)。
    • 添加了显示SQL查询成功/失败的变量(提交 69835bc8;添加的变量:ERRORSQLSTATEROW_COUNTLAST_ERROR_MESSAGELAST_ERROR_SQLSTATE)。
    • 添加了测试变量是否存在的功能(提交 d57c7a7c)。
    • 添加了环境变量PSQL_PAGER,用于控制psql的分页器(提交 5e8304fd)。
    • 使制表符补全功能独立于服务器(提交 722408bc)。
    • 添加了quitexit命令,类似于MySQL的命令行客户端(提交 df9f599b)。
  •  PostgreSQL 10psql 发布说明)。
    • 添加了显示psql版本和服务器版本的变量(提交 9ae9d8c1;添加的变量:VERSION_NAMEVERSION_NUMSERVER_VERSION_NAMESERVER_VERSION_NUM)。
    • 添加了元命令\if\elif\else\endif(提交 e984ef58)。
    • 添加了\gx命令以扩展模式执行查询(提交 b2678efd)。
  • PostgreSQL 9.6psql 发布说明)。
    • 添加了对多个和混合-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.5psql 发布说明)。
    • 添加了-b命令行选项和新的ECHO模式errors,它仅显示失败的命令(提交 5b214c5d)。
    • 添加了AsciiDoc输出模式(提交 9d9991c8)。
    • 添加了提示选项%l,它显示当前语句的行号(提交 51bb7956)。
    • 添加了\pset选项pager_min_lines(提交 7655f4cc)。
    • 添加了Unicode列、标题和边框线样式控件(提交 a2dabf0e)。
    • 添加了对search_path的基本制表符补全支持(提交 bd409519)。
    • \db+PostgreSQL 9.2及更高版本中显示表空间大小(提交 ee80f043)。
  • PostgreSQL 9.4psql 发布说明)。
    • 现在在登录横幅中显示SSL压缩状态(提交 d3c98069)。
    • 不带参数的\pset现在显示所有设置(提交 c64e68fd)。
  • PostgreSQL 9.3psql 发布说明)。
    • 添加了\watch(提交 c6a3fce7)。
    • 添加了\gset(提交 d2d153fd)。
    • 仅在连接到较新(而不是较旧)的服务器版本时发出警告(提交 5cad0245)。
  • PostgreSQL 9.2psql 发布说明)。
    • \x命令中添加了auto选项(提交 95d2af16)。
    • 添加了\ir命令(提交 c7f23494)。
    • 添加了\setenv命令(提交 e6d9e210)。
    • 添加了.psqlrc-X.X(其中X.X表示PostgreSQL主版本)处理(提交 2795592e)。
    • 现在识别PSQL_HISTORYPSQLRC环境变量(提交 34c97844)。
    • 添加了 COMP_KEYWORD_CASE变量以控制制表符补全中的关键字大小写(提交 db84ba65)。
  • PostgreSQL 9.1psql 发布说明)。
    • 添加了\conninfo命令以显示当前连接信息(提交 013ed0bd)。
    • 添加了\sf命令以显示函数的定义(提交 b6e06942)。
    • 添加了\dL命令以列出可用的语言(提交 9c5e2c12)。
    • 现在\dn默认忽略系统模式,\dnS包含它们(提交 e43fb604)。
    • 添加了\dO命令以列出可用的排序规则(提交 b313bca0)。
  • PostgreSQL 8.4
    • 添加了\ef命令(提交 2c863ca8)。
  • PostgreSQL 8.0
    • 能够处理文件名中的波浪号用户扩展(提交 55a92063)。
  • PostgreSQL 7.4
    • 添加了提示选项%x以显示事务状态(初始提交 f9ebf369 作为 %T,后来在提交 9951474c 中更改为%x)。
    • 添加了特殊变量VERBOSITY(初始提交 f9ebf369 作为VERBOSE,后来在提交 02d79e76 中更改为VERBOSITY)。
  • PostgreSQL 7.3
    • 添加了\dD命令以列出可用的(提交 a7ade2bb)。
    • 现在显示视图上的规则(提交 aab0b8f5)。
  • PostgreSQL 7.0
    • 添加了制表符补全支持(提交 78bc83fe)。
  • PostgreSQL 6.3
    • 添加了\da命令以列出可用的聚合函数(提交 4cbc06cf)。

    • \do 命令用于列出已添加的可用操作符(提交 4cbc06cf
    • \dT 命令用于列出已添加的可用数据类型(提交 4cbc06cf
  • PostgreSQL 6.1
    • \ds 命令用于列出已添加的可用序列(提交 735bf0b7
    • \dt\di 命令用于列出已添加的可用表和索引(提交 ff038a5b
    • \z 命令已添加(提交 f986173e
  • PostgreSQL 6.0
    • \copy 命令已添加(提交 7870c5a0
  • PostgreSQL 文档: psql

类别

客户端应用程序核心实用程序psql

另请参阅

.psqlrc斜杠命令psql 技巧

反馈

提交任何关于 "psql" 的评论、建议或更正 此处