psql 启动指南:PostgreSQL 元命令的必备指南
学习 psql 元命令,帮助您检查模式、格式化输出、切换数据库,并在终端中更高效地工作。
提升 psql 效率:PostgreSQL 元命令必备指南
当您在终端中使用 PostgreSQL 时,psql 元命令可以帮您省去编写目录查询的麻烦,快速完成日常检查。这些反斜杠命令能帮助您列出表、描述对象、切换数据库、格式化输出以及获取帮助,而无需离开当前会话。
本指南涵盖了您最常使用的 psql 命令,并展示了它们在实际数据库工作中的适用场景。
理解 psql 元命令
psql 中的元命令是由 psql 自身处理而非发送给 PostgreSQL 服务器执行的指令。它们通过前导反斜杠(\)轻松识别。这一区别至关重要,因为元命令拥有自己独立的语法和行为,与标准 SQL 不同。
例如,要列出所有表,您可能会编写 SELECT * FROM information_schema.tables;,而一个 psql 元命令只需简单的 \dt 即可实现相同结果。
数据库检查的必备元命令
检查数据库结构是一项常见任务。psql 提供了多个元命令来简化这一过程。
列出表(\dt)
\dt 命令是最常用的元命令之一。它列出当前数据库中的所有表,以及它们的模式和所有者。
示例:
\dt输出:
List of relations Schema | Name | Type | Owner --------+------------+-------+---------- public | accounts | table | postgres public | products | table | postgres sales | orders | table | dbadmin (3 rows)变体:
\dt+:提供更详细的信息,包括表大小和描述。\dt schema.*:仅列出特定模式中的表。
描述表和列(\d)
\d 命令对于理解特定表的结构(包括列、数据类型、约束和索引)非常有用。
示例: 描述
products表:\d products输出:
Table "public.products" Column | Type | Collation | Nullable | Default ----------+-----------------------+-----------+----------+--------- product_id | integer | | not null | name | character varying(100)| | | price | numeric(10, 2) | | | Indexes: "products_pkey" PRIMARY KEY, btree (product_id)变体:
\d+ table_name:提供更详细的信息,包括存储参数和注释。\dn:列出所有模式。\df:列出所有函数。\dv:列出所有视图。
检查视图(\dv)
与表类似,您可以列出和描述视图。
示例(列出视图):
\dv示例(描述视图):
\dv my_view
列出模式(\dn)
要查看数据库中存在的所有模式,请使用 \dn 命令。
- 示例:
\dn
查询管理和输出控制的元命令
psql 提供了强大的选项来控制查询结果的显示方式以及管理查询历史。
查询计时(\timing)
\timing 命令切换每个 SQL 查询的耗时显示。在调优查询时,它对于快速比较很有用,但当您需要真正的执行计划时,应使用 EXPLAIN (ANALYZE, BUFFERS)。
示例(开启计时):
\timing on现在,您运行的每个查询都会显示其执行时间。
示例(关闭计时):
\timing off
输出格式化(\a, \H, \t)
\a:在对齐(表格)和未对齐(类 CSV)输出之间切换。未对齐输出通常更易于程序化解析。\a SELECT * FROM products;\H:将输出格式切换为 HTML。\H SELECT * FROM products;\t:切换列标题和行计数页脚的显示。当您希望输出更易于管道传输到另一个命令时,这很有用。\t SELECT name, price FROM products;
分页(\pset pager)
如果查询结果很长,psql 可能会使用分页器(如 less),具体取决于您的环境和分页器设置。使用 \pset pager 控制该行为。
示例(对长输出使用分页器):
\pset pager on示例(禁用分页器):
\pset pager off
管理性元命令
除了检查和输出控制,psql 还提供了用于常见管理任务的命令。
列出数据库(\l)
要查看已连接的 PostgreSQL 服务器上所有可用的数据库,请使用 \l。
- 示例:
\l
连接到其他数据库(\c)
如果您已经连接到 psql 会话并希望切换到另一个数据库,请使用 \c 命令。
- 示例: 连接到
mydatabase数据库:\c mydatabase
运行 \? 获取帮助
如有疑问,psql 提供了自己的帮助系统。\? 命令列出所有可用的元命令,而 \! 允许您运行 shell 命令。
示例(列出所有元命令):
\?示例(运行 shell 命令,例如
ls):\! ls -l
最佳实践与技巧
- 为完整的
psql命令使用 shell 别名: Shell 别名无法在已打开的psql会话中运行\dt,但可以缩短常见的启动命令。例如,alias pprod='psql "postgresql://[email protected]/prod"'。 - 与 SQL 结合使用: 元命令与 SQL 并不互斥。您可以在编写
SELECT语句之前使用它们快速检查模式,或使用\timing比较查询运行时间。 - 理解作用域: 请记住,元命令在当前
psql会话和连接的上下文中运行。像\c这样的命令会更改该会话的活动数据库。 - 善用
\?: 内置帮助非常全面,是您需要回忆命令或发现新命令时的绝佳资源。
要点总结
从 \dt、\d、\dn、\l、\c、\timing、\pset pager 和 \? 开始。这几个命令涵盖了大多数日常检查工作,让 psql 不再像一个原始的 SQL 提示符。