Postgresql入门之psql用法详解(二)- 元命令详解(\a-\dc)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: psql元命令以反斜杠开头,由psql客户端直接解析执行,用于增强数据库管理与脚本操作。支持参数引用、变量插值、shell命令执行及SQL语句联动,涵盖连接控制、对象查看、数据导入导出等功能,是PostgreSQL交互操作的重要工具。

元命令

您在 psql 中输入的任何以未加引号的反斜杠开头的内容都是一个 psql 元命令,由 psql 本身处理。这些命令使 psql 在管理或脚本编写方面更加有用。元命令通常称为斜杠或反斜杠命令。

psql 命令的格式是反斜杠,后紧跟一个命令动词,然后是任何参数。参数与命令动词之间以及参数彼此之间由任意数量的空白字符分隔。

要在参数中包含空白,可以用单引号将其引起来。要在参数中包含单引号,请在单引号文本内写入两个单引号。单引号中包含的任何内容还会进行类似 C 的替换,例如 \n(换行)、\t(制表符)、\b(退格)、\r(回车)、\f(换页)、\digits(八进制)和 \xdigits(十六进制)。在单引号文本中,前面有反斜杠的任何其他字符都会引用该单个字符,无论它是什么。

如果参数中出现未加引号的冒号(:)后跟一个 psql 变量名,它将被变量的值替换,如下面的 SQL 插值所述。那里描述的 :'variable_name' 和 :"variable_name" 形式也有效。:{?variable_name} 语法允许测试变量是否已定义。它被替换为 TRUE 或 FALSE。用反斜杠转义冒号可以防止其被替换。

在参数中,用反引号(`)括起来的文本被视为传递给 shell 的命令行。命令的输出(删除任何尾随换行符)将替换反引号文本。在反引号括起来的文本中,不会发生特殊的引用或其他处理,除了 variable_name 是 psql 变量名的 :variable_name 出现的地方会被变量的值替换。此外,:'variable_name' 的出现会被替换为适当引用的变量值,以成为单个 shell 命令参数。(后一种形式几乎总是更可取的,除非您非常确定变量中的内容。)由于回车和换行符不能在所有平台上安全地引用,当值中出现此类字符时,:'variable_name' 形式会打印错误消息并且不替换变量值。

一些命令将 SQL 标识符(例如表名)作为参数。这些参数遵循 SQL 的语法规则:未加引号的字母被强制转换为小写,而双引号(")保护字母不进行大小写转换,并允许将空白合并到标识符中。在双引号内,成对的双引号在结果名称中减少为一个双引号。例如,FOO"BAR"BAZ 被解释为 fooBARbaz,而 "A weird"" name" 变为 A weird" name。

参数解析在行尾或找到另一个未加引号的反斜杠时停止。未加引号的反斜杠被视为新元命令的开始。特殊序列 \(两个反斜杠)标记参数结束并继续解析 SQL 命令(如果有)。这样,SQL 和 psql 命令可以在行上自由混合。但无论如何,元命令的参数不能延续到行尾之后。

许多元命令作用于当前查询缓冲区。这只是一个缓冲区,保存已键入但尚未发送到服务器执行的任何 SQL 命令文本。这将包括先前的输入行以及同一行上出现在元命令之前的任何文本。

许多元命令还允许附加 x 作为选项。这将导致结果以扩展模式显示,就像使用了 \x 或 \pset expanded 一样。

定义了以下元命令:

\a
如果当前表格输出格式是非对齐的,则切换到对齐。如果不是非对齐的,则设置为非对齐。保留此命令是为了向后兼容。有关更通用的解决方案,请参阅 \pset。

\bind [ 参数 ] ...
设置下一个查询执行的查询参数,指定的参数传递给任何参数占位符($1 等)。

示例:

INSERT INTO tbl1 VALUES ($1, $2) \bind 'first value' 'second value' \g

这也适用于 \g 以外的查询执行命令,例如 \gx 和 \gset。

此命令导致使用扩展查询协议,与使用简单查询协议的普通 psql 操作不同。因此,此命令可用于从 psql 测试扩展查询协议。(即使查询没有参数且此命令指定零个参数,也使用扩展查询协议。)此命令仅影响下一个执行的查询;默认情况下,所有后续查询将使用简单查询协议。

\bind_named 语句名 [ 参数 ] ...
\bind_named 等同于 \bind,只是它接受现有预备语句的名称作为第一个参数。空字符串表示未命名的预备语句。

示例:

INSERT INTO tbls1 VALUES ($1, $2) \parse stmt1
\bind_named stmt1 'first value' 'second value' \g

此命令导致使用扩展查询协议,与使用简单查询协议的普通 psql 操作不同。因此,此命令可用于从 psql 测试扩展查询协议。

\c 或 \connect [ -reuse-previous=on|off ] [ 数据库名 [ 用户名 ] [ 主机 ] [ 端口 ] | conninfo ]
建立到 PostgreSQL 服务器的新连接。要使用的连接参数可以使用位置语法(数据库名、用户、主机和端口中的一个或多个)指定,或使用 conninfo 连接字符串指定。如果未给出任何参数,则使用与之前相同的参数建立新连接。

将 dbname、username、host 或 port 中的任何一个指定为 - 等同于省略该参数。

新连接可以重用先前连接的连接参数;不仅是数据库名、用户、主机和端口,还有其他设置,如 sslmode。默认情况下,在位置语法中重用参数,但在给出 conninfo 字符串时不重用。传递第一个参数 -reuse-previous=on 或 -reuse-previous=off 会覆盖该默认值。如果参数被重用,则任何未在位置参数或 conninfo 字符串中显式指定的参数都将从现有连接的参数中获取。一个例外是,如果使用位置语法将主机设置从其先前的值更改,则现有连接参数中存在的任何 hostaddr 设置都会被丢弃。此外,仅当用户、主机和端口设置未更改时,才会重用用于现有连接的任何密码。当命令既未指定也未重用特定参数时,将使用 libpq 默认值。

如果成功建立新连接,则先前的连接将关闭。如果连接尝试失败(错误的用户名、访问被拒绝等),并且 psql 处于交互模式,则将保留先前的连接。但在执行非交互式脚本时,旧连接将关闭并报告错误。这可能会也可能不会终止脚本;如果没有,所有访问数据库的命令都将失败,直到另一个 \connect 命令成功执行为止。选择这种区别是为了方便用户一方面防止拼写错误,另一方面作为一种安全机制,防止脚本意外地对错误的数据库进行操作。请注意,每当 \connect 命令尝试重用参数时,重用的值是最后一次成功连接的值,而不是随后任何失败尝试的值。但是,在非交互式 \connect 失败的情况下,不允许以后重用任何参数,因为脚本可能期望重用失败的 \connect 中的值。

示例:

=> \c mydb myuser host.dom 6432
=> \c service=foo
=> \c "host=localhost port=5432 dbname=mydb connect_timeout=10 sslmode=disable"
=> \c -reuse-previous=on sslmode=require    -- 仅更改 sslmode
=> \c postgresql://tom@localhost/mydb?application_name=myapp

\C [ 标题 ]
设置作为查询结果打印的任何表格的标题,或取消设置任何此类标题。此命令等效于 \pset title title。(此命令的名称来源于“caption”,因为它以前仅用于设置 HTML 表格中的标题。)

\cd [ 目录 ]
将当前工作目录更改为 directory。如果没有参数,则更改为当前用户的主目录。

提示
要打印您当前的工作目录,请使用 ! pwd。

\close_prepared 预备语句名
关闭指定的预备语句。空字符串表示未命名的预备语句。如果不存在具有此名称的预备语句,则此操作无效。

示例:

SELECT $1 \parse stmt1
\close_prepared stmt1

此命令导致使用扩展查询协议,与使用简单查询协议的普通 psql 操作不同。因此,此命令可用于从 psql 测试扩展查询协议。

\conninfo
输出有关当前数据库连接的信息,包括如果使用 SSL 则包括 SSL 相关信息。

请注意,客户端用户字段显示连接时的用户,而超级用户字段指示当前用户(在当前执行上下文中)是否具有超级用户权限。这些用户通常是相同的,但它们可能不同,例如,如果当前用户使用 SET ROLE 命令更改。

\copy { 表 [ ( 列列表 ) ] } from { '文件名' | program '命令' | stdin | pstdin } [ [ with ] ( 选项 [, ...] ) ] [ where 条件 ]
\copy { 表 [ ( 列列表 ) ] | ( 查询 ) } to { '文件名' | program '命令' | stdout | pstdout } [ [ with ] ( 选项 [, ...] ) ]
执行前端(客户端)复制。这是一个运行 SQL COPY 命令的操作,但不是服务器读取或写入指定文件,而是 psql 读取或写入文件并在服务器和本地文件系统之间路由数据。这意味着文件可访问性和权限是本地用户的权限,而不是服务器的权限,并且不需要 SQL 超级用户权限。

当指定 program 时,命令由 psql 执行,并且从命令传递或向命令传递的数据在服务器和客户端之间路由。同样,执行权限是本地用户的权限,而不是服务器的权限,并且不需要 SQL 超级用户权限。

对于 \copy ... from stdin,数据行从发出命令的同一源读取,直到读取到仅包含 . 的行或流到达 EOF。此选项对于在 SQL 脚本文件中内联填充表很有用。对于 \copy ... to stdout,输出发送到与 psql 命令输出相同的位置,并且不打印 COPY 计数命令状态(因为它可能与数据行混淆)。要无论当前命令源或 \o 选项如何都读取/写入 psql 的标准输入或输出,请写入 from pstdin 或 to pstdout。

此命令的语法类似于 SQL COPY 命令。除数据源/目标之外的所有选项都按照 COPY 的规定指定。因此,特殊的解析规则适用于 \copy 元命令。与大多数其他元命令不同,行的整个其余部分始终被视为 \copy 的参数,并且参数中不执行变量插值或反引号扩展。

提示
获得与 \copy ... to 相同结果的另一种方法是使用 SQL COPY ... TO STDOUT 命令并使用 \g 文件名 或 \g |program 终止它。与 \copy 不同,此方法允许命令跨越多行;此外,可以使用变量插值和反引号扩展。

提示
这些操作的效率不如具有文件或程序数据源或目标的 SQL COPY 命令,因为所有数据都必须通过客户端/服务器连接。对于大量数据,SQL 命令可能更可取。

\copyright
显示 PostgreSQL 的版权和分发条款。

\crosstabview [ 列V [ 列H [ 列D [ 排序列H ] ] ] ]
执行当前查询缓冲区(如 \g)并在交叉表网格中显示结果。查询必须返回至少三列。由 colV 标识的输出列成为垂直标题,由 colH 标识的输出列成为水平标题。colD 标识要在网格内显示的输出列。sortcolH 标识水平标题的可选排序列。

每个列规范可以是列号(从 1 开始)或列名。通常的 SQL 大小写折叠和引用规则适用于列名。如果省略,colV 被视为第 1 列,colH 被视为第 2 列。colH 必须不同于 colV。如果未指定 colD,则查询结果必须正好有三列,并且既不是 colV 也不是 colH 的列被视为 colD。

垂直标题显示为最左边的列,包含在列 colV 中找到的值,顺序与查询结果中的顺序相同,但重复项已删除。

水平标题显示为第一行,包含在列 colH 中找到的值,重复项已删除。默认情况下,这些值以与查询结果中相同的顺序出现。但如果给出了可选的 sortcolH 参数,它会标识一个其值必须为整数的列,并且 colH 中的值将根据相应的 sortcolH 值排序后出现在水平标题中。

在交叉表网格内部,对于 colH 的每个不同值 x 和 colV 的每个不同值 y,位于交点 (x,y) 的单元格包含查询结果行中 colD 列的值,其中该行的 colH 值为 x,colV 值为 y。如果没有这样的行,则该单元格为空。如果有多个这样的行,则会报告错误。

\d[Sx+] [ 模式 ]
对于每个与模式匹配的关系(表、视图、物化视图、索引、序列或外部表)或复合类型,显示所有列、它们的类型、表空间(如果不是默认值)以及任何特殊属性,例如 NOT NULL 或默认值。还会显示关联的索引、约束、规则和触发器。对于外部表,还会显示关联的外部服务器。(“匹配模式”的定义见下面的模式。)

对于某些类型的关系,\d 会为每个列显示附加信息:序列的列值、索引的索引表达式以及外部表的外部数据包装器选项。

命令形式 \d+ 是相同的,只是显示更多信息:显示与表列关联的任何注释,以及表中 OID 的存在(如果有)、如果关系是视图则显示视图定义、非默认副本标识设置以及如果关系有访问方法则显示访问方法名称。

默认情况下,仅显示用户创建的对象;提供模式或 S 修饰符以包括系统对象。

注意
如果 \d 在没有模式参数的情况下使用,它等效于 \dtvmsE,它将显示所有可见表、视图、物化视图、序列和外部表的列表。这纯粹是一种便利措施。

与许多其他命令一样,如果命令名称后附加了 x,则结果以扩展模式显示,但请注意,这仅当 \d 在没有模式参数的情况下使用时适用,并且 x 修饰符不能紧跟在 \d 之后(因为 \dx 是一个不同的命令);x 修饰符只能出现在 S 或 + 修饰符之后。例如,\d+x 等效于 \dtvmsE+x,并将以扩展模式显示所有关系的列表。

\da[Sx] [ 模式 ]
列出聚合函数,以及它们的返回类型和操作的数据类型。如果指定了 pattern,则仅显示名称与模式匹配的聚合函数。默认情况下,仅显示用户创建的对象;提供模式或 S 修饰符以包括系统对象。如果 x 附加到命令名称,则结果以扩展模式显示。

\dA[x+] [ 模式 ]
列出访问方法。如果指定了 pattern,则仅显示名称与模式匹配的访问方法。如果 x 附加到命令名称,则结果以扩展模式显示。如果 + 附加到命令名称,则每个访问方法都与其关联的处理函数和描述一起列出。

\dAc[x+] [访问方法模式 [输入类型模式]]
列出操作符类。如果指定了 access-method-pattern,则仅列出与名称与该模式匹配的访问方法关联的操作符类。如果指定了 input-type-pattern,则仅列出与名称与该模式匹配的输入类型关联的操作符类。如果 x 附加到命令名称,则结果以扩展模式显示。如果 + 附加到命令名称,则每个操作符类都与其关联的操作符族和所有者一起列出。

\dAf[x+] [访问方法模式 [输入类型模式]]
列出操作符族。如果指定了 access-method-pattern,则仅列出与名称与该模式匹配的访问方法关联的操作符族。如果指定了 input-type-pattern,则仅列出与名称与该模式匹配的输入类型关联的操作符族。如果 x 附加到命令名称,则结果以扩展模式显示。如果 + 附加到命令名称,则每个操作符族都与其所有者一起列出。

\dAo[x+] [访问方法模式 [操作符族模式]]
列出与操作符族关联的操作符。如果指定了 access-method-pattern,则仅列出与名称与该模式匹配的访问方法关联的操作符族的成员。如果指定了 operator-family-pattern,则仅列出名称与该模式匹配的操作符族的成员。如果 x 附加到命令名称,则结果以扩展模式显示。如果 + 附加到命令名称,则每个操作符都与其排序操作符族(如果是排序操作符)以及其底层函数是否防泄漏一起列出。

\dAp[x+] [访问方法模式 [操作符族模式]]
列出与操作符族关联的支持函数。如果指定了 access-method-pattern,则仅列出与名称与该模式匹配的访问方法关联的操作符族的函数。如果指定了 operator-family-pattern,则仅列出名称与该模式匹配的操作符族的函数。如果 x 附加到命令名称,则结果以扩展模式显示。如果 + 附加到命令名称,则函数会详细显示,并显示其实际参数列表。

\db[x+] [ 模式 ]
列出表空间。如果指定了 pattern,则仅显示名称与模式匹配的表空间。如果 x 附加到命令名称,则结果以扩展模式显示。如果 + 附加到命令名称,则每个表空间都与其关联的选项、磁盘上大小、权限和描述一起列出。

\dc[Sx+] [ 模式 ]
列出字符集编码之间的转换。如果指定了 pattern,则仅列出名称与模式匹配的转换。默认情况下,仅显示用户创建的对象;提供模式或 S 修饰符以包括系统对象。如果 x 附加到命令名称,则结果以扩展模式显示。如果 + 附加到命令名称,则每个对象都与其关联的描述一起列出。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
18天前
|
弹性计算 运维 Java
假期用阿里云服务器一键部署我的世界/幻兽帕鲁等游戏联机服务器教程
假期里和好友联机畅玩《我的世界》《幻兽帕鲁》等游戏,是不少玩家的休闲选择。自己搭建专属联机服务器,不仅能保证游玩私密性,还能自定义游戏规则,提升体验感。阿里云提供的一键部署服务,大幅简化了操作流程,即使是零基础的新人,也能在几分钟内完成部署。本文将整合最新的操作指南,详细拆解部署全流程,同时覆盖后续运维的核心要点。
|
2月前
|
机器学习/深度学习 人工智能 缓存
让AI评测AI:构建智能客服的自动化运营Agent体系
大模型推动客服智能化演进,从规则引擎到RAG,再到AI原生智能体。通过构建“评估-诊断-优化”闭环的运营Agent,实现对话效果自动化评测与持续优化,显著提升服务质量和效率。
1478 85
让AI评测AI:构建智能客服的自动化运营Agent体系
|
30天前
|
Ubuntu Linux 应用服务中间件
Rocky Linux 9下logrotate配置及踩坑记
本文介绍在Rocky Linux 9系统中配置Nginx日志轮转的完整过程,满足等保要求保留180天日志。通过修改`/etc/logrotate.conf`并创建Nginx专属轮转配置,结合`logrotate.d`与每日定时任务,解决默认无cron脚本导致轮转失效的问题,并提示避免将日志置于系统目录引发权限错误。
|
25天前
|
机器学习/深度学习 缓存 物联网
打造社交APP人物动漫化:通义万相wan2.x训练优化指南
本项目基于通义万相AIGC模型,为社交APP打造“真人变身跳舞动漫仙女”特效视频生成功能。通过LoRA微调与全量训练结合,并引入Sage Attention、TeaCache、xDIT并行等优化技术,实现高质量、高效率的动漫风格视频生成,兼顾视觉效果与落地成本,最终优选性价比最高的wan2.1 lora模型用于生产部署。(239字)
862 102
|
8天前
|
机器学习/深度学习 算法 自动驾驶
基于YOLOv8模型的行人车辆多目标检测计数与跟踪系统
本研究基于YOLOv8模型,针对智能交通与公共安全需求,开展行人车辆多目标检测、计数与跟踪技术研究。通过融合YOLOv8高精度检测与DeepSORT稳定跟踪,实现复杂场景下目标的实时定位、统计与轨迹追踪,提升交通管理效率与公共安全保障能力,推动智慧城市发展。
|
8天前
|
存储 弹性计算 Cloud Native
2026年最新一期阿里云优惠券解析:五种主要优惠券类型、金额、领取及使用规则讲解
为了进一步降低用户的上云成本,2026年阿里云继续推出多种优惠券,以助力用户轻松实现数字化转型。本文将全面介绍阿里云目前提供的五种主要优惠券类型,包括老友专属福利券包、无门槛优惠券、出海补贴优惠券、迁云补贴优惠券以及按量达标代金券等,帮助用户深入了解这些优惠券的金额、领取及使用规则,从而更好地利用这些优惠,提升购买体验。
162 13
|
24天前
|
存储 人工智能 运维
阿里云 Tair 基于 3FS 工程化落地 KVCache:企业级部署、高可用运维与性能调优实践
阿里云 Tair KVCache 团队联合硬件团队对 3FS 进行深度优化,通过 RDMA 流量均衡、小 I/O 调优及全用户态落盘引擎,提升 4K 随机读 IOPS 150%;增强 GDR 零拷贝、多租户隔离与云原生运维能力,构建高性能、高可用、易管理的 KVCache 存储底座,助力 AI 大模型推理降本增效。
|
6天前
|
存储 人工智能 物联网
给AI模型“瘦身”:LoRA微调技术,让你用消费级显卡玩转大模型
LoRA(低秩自适应)技术让大模型微调变得高效且低成本。它通过冻结原模型、仅训练小型适配模块,大幅减少显存占用与计算资源需求,使个人开发者也能用普通GPU微调7B参数模型,成本降低90%以上,是当前最主流的参数高效微调方法之一。
|
18天前
|
机器学习/深度学习 人工智能 数据可视化
构建AI智能体:七十三、模型的成绩单:一文读懂损失函数,看懂AI如何学习
本文系统介绍了损失函数在机器学习中的核心作用。首先通过类比教学场景,阐释损失函数作为模型"导师"的重要性。随后详细解析了回归任务中的均方误差(MSE)和平均绝对误差(MAE),通过房价预测案例展示了它们对误差的不同处理方式。在分类任务部分,重点讲解了二分类和多分类交叉熵损失函数,使用垃圾邮件识别和图像分类等实例,说明这些函数如何通过概率计算来评估预测准确性。文章通过可视化图表直观呈现了不同损失函数的特点,并强调损失函数作为模型优化的指南针,其设计直接影响学习效果。
193 20