导读:本期聚焦于芒果创作的《psql元命令\d系列怎么用?一文搞活PostgreSQL对象定义查看技巧》,敬请观看详情。psql元命令\d系列怎么用?本文系统梳理PostgreSQL中以\d开头的常用元命令,涵盖\dt查表、\d加表名看结构、\df查函数、\dv查视图、\dn查schema、\dx查扩展、\di查索引、\ds查序列等用法,并给出\du查用户角色、\l列数据库、\dT查类型、\sf看函数源码的实操示例。同时介绍\d+查看存储参数与注释、\d命令结合通配符过滤对象的技巧,帮你告别反复查系统目录表,在psql终端里快速掌握数据库对象定义,提升日常运维与开发排错效率。

psql元命令\d系列查看对象定义是PostgreSQL日常使用中绕不开的一项基本功。相比直接查询pg_class、pg_attribute这些系统目录表,psql提供的反斜杠元命令能把对象的结构、类型、索引、约束、注释一次性整理成清晰的表格输出,省去了手写SQL的麻烦。这篇文章把常用的\d系列命令整理一遍,配上实际输出示例,方便随时查阅。

psql元命令\d系列怎么用?一文搞活PostgreSQL对象定义查看技巧

一、\d系列命令的基础用法

在psql里,反斜杠开头的命令叫元命令(meta command),它们由psql客户端本地解析,不会发送到服务器执行,所以响应非常快。最常用的是不带参数的\d,直接回车会列出当前搜索路径下所有可见的关系对象,包括表、视图、物化视图、序列和索引。

如果只想看某一张表的详细定义,在\d后面跟上表名即可,例如\d orders。输出会包含表的列定义、数据类型、可空性、默认值,以及这张表上的索引、约束、外键关系和被哪些视图引用。这个命令堪称排查表结构问题的第一选择。

-- 查看orders表的完整定义
\d orders

-- 输出示例
                Table "public.orders"
   Column   |  Type   | Nullable |      Default
------------+---------+----------+-------------------
 id         | integer | not null | nextval('orders_id_seq'::regclass)
 user_id    | integer | not null |
 amount     | numeric | not null | 0
Indexes:
    "orders_pkey" PRIMARY KEY, btree (id)
Foreign-key constraints:
    "orders_user_id_fkey" FOREIGN KEY (user_id) REFERENCES users(id)

加上加号可以看到更多信息:\d+ orders会额外显示每一列的存储设置、压缩方式、统计目标,以及表的表空间、选项和注释。同样地,\dt+\df+等几乎所有\d系列命令都支持加号后缀,输出更详细的元数据。

二、按对象类型分类查看:\dt、\dv、\di、\ds、\dn、\dx

不带参数的\d会把所有对象混在一起列出来,实际工作中更常见的是按类型过滤。\dt只列出普通表,\dv只列视图,\di只列索引,\ds只列序列,\dm列物化视图。这些命令都支持可选的模式参数配合通配符使用。

-- 列出所有表
\dt

-- 只列出名称以log_开头的表
\dt log_*

-- 查看指定schema下的视图
\dv myschema.*

-- 列出所有物化视图及大小
\dm+

注意通配符匹配的是整个对象名,*可以匹配任意字符串。如果想跨schema查找,需要写完整的schema限定名,比如\dt *.users会列出所有schema里名为users的表。另外\dn用来列出schema,\dx用来列出已安装的扩展,加上加号还能看到扩展里包含的具体对象清单,排查扩展依赖时非常实用。

三、函数、类型与源码:\df、\dT、\sf、\da

函数相关的查看主要靠\df和\sf。\df列出函数名、返回类型和参数类型,支持按模式过滤,比如\df calc*列出所有以calc开头的函数。想直接看函数的定义源码,用\sf 函数名,它会输出带行号的完整函数体,定位问题行特别方便。

-- 查看函数定义源码
\sf get_user_orders(integer)

-- 输出示例
CREATE OR REPLACE FUNCTION public.get_user_orders(uid integer)
 RETURNS SETOF orders
 LANGUAGE plpgsql
AS $function$
BEGIN
  RETURN QUERY SELECT * FROM orders WHERE user_id = uid;
END;
$function$

类型方面,\dT列出数据类型,\dT+能看到类型的元素类型和修饰符。对于自定义枚举类型,配合\dT+还能看到所有枚举值。聚合函数用\da查看,操作符用\do查看。这几个命令在维护自定义类型的库时经常用到。

四、权限与全局对象:\du、\l、\dp

用户和角色相关的查看用\du,它会列出所有角色及其属性,比如是否可以登录、是否是超级用户、属于哪些组。加号还能看到角色的描述信息。数据库列表用\l查看,\l+会附带每个数据库的大小、表空间和编码信息。

权限分配的排查交给\dp,它显示表、视图、序列上的访问权限,输出中的字母缩写对应SELECT、INSERT、UPDATE等权限,配合官方文档的权限速查表可以快速判断某个用户对某张表有哪些操作权限。如果发现某个用户连不上某张表,第一时间跑一遍\dp通常就能找到原因。

-- 查看角色列表
\du

-- 查看所有数据库及大小
\l+

-- 查看orders表的权限分配
\dp orders

五、几个提升效率的实用技巧

第一,善用\dD\dF这类冷门命令。\dD查看默认权限(default privileges),\dF查看文本搜索配置,虽然使用频率不高,但在处理全文检索或权限模板问题时能省不少事。第二,记住可以用\d(string)的形式在\d后面直接跟完整定义查询,比如某些版本里\d跟上表名再加*能递归展开继承表的所有子表。

第二,把元命令和\x配合使用。当表的列特别多时,\d的横向表格会被截断,先执行\x on切换为扩展显示模式,再看\d+的输出会清爽很多。第三,如果想知道某条元命令对应的真实SQL,可以用\set ECHO_HIDDEN on,之后执行任何元命令都会先打印psql底层发出的查询语句,这是学习PostgreSQL系统目录表结构的好办法。

总的来说,psql元命令\d系列查看对象定义这套命令并不复杂,核心是记住类型首字母的对应关系:t是table、v是view、i是index、s是sequence、f是function、n是schema、u加d是用户。熟练之后,大部分结构排查工作都能在psql终端里几秒钟搞定,完全不需要去翻图形化工具或者手写目录表查询。

psql元命令PostgreSQL数据库管理修改时间:2026-09-05 02:04:32

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260905/50607.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。