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 提示符。