对于积极使用和连接到 PostgreSQL 数据库的任何开发人员或 DBA 来说,能够访问psql命令行工具是必不可少的。在我们的第一篇文章中,我们讨论了 psql的简要历史,并演示了如何在您选择的平台上安装它并连接到 PostgreSQL 数据库。
在本文中,我们将帮助您了解成为高级用户所需了解的所有psql基本知识 。从基本的命令语法到最常见(和最有用的)元命令,本文的其余部分都涵盖了这些内容。
要从本内容中获得最大价值,您应该已经 安装psql并连接到 PostgreSQL 数据库,以便您可以在阅读时尝试这些命令。
基本可用性提示
psql实用程序包含许多有用的命令,可帮助您探索和管理数据库。任何斜杠命令 ( \) 都用于指定一个元命令,该命令通常会在后台运行必要的 SQL 查询并以可读格式返回结果。
首先,让我们看一下有关 psql 作为命令行工具工作的一些技巧。了解如何启用某些功能或为每个元命令找到帮助,将有助于您更好的使用它。
01 分号是必需的
PostgreSQL 遵守 ANSI SQL 标准,该标准规定了语句终止是分号。在psql中可以通过添加分号并按 Enter 来表示 SQL 语句的结束。
如果不添加分号,psql将只提供一个新行供您继续输入,如下所示。
pagila_dev=# select * from film
pagila_dev-# ;
在添加分号之前不会执行查询。
02 命令历史和分页、
psql是一个终端应用程序,因此它保留了您执行过的查询和命令的历史记录。因此,您可以使用键盘上的向上和向下箭头翻阅以前的命令和语句。当您想多次运行一条语句但每次只更改过滤条件时,这很有用。
历史记录存储在本地客户端的文件中,这意味着它会因计算机而异。您还可以配置.psqlrc文件中的变量HISTFILE为使用 psql的每个数据库或服务器创建不同的历史文件。
要查看已运行命令的列表,请使用 \s 命令。
postgres=# \s
\c pagila_
\c pagila_dev
\df
\x
\df
select * from film
;
\s
03 自动完成(补全)
psql支持基于选项卡的自动完成。对于许多命令,您可以使用TAB键来触发自动补全或给出建议。如果您想列出一个表或连接到一个不同的数据库,请从元命令开始,然后开始键入对象名称并按TAB。如果有多个匹配项,psql将提供类似于 Linux 终端的可能匹配项。
04 扩展的结果表格式
我很早就了解到的psql第一个有用的提示之一是:有两种模式可以同时显示查询和元命令结果。通常,psql将以等宽字体格式化数据的行和列,并在合理范围内进行适当的填充量以使所有内容对齐。但是,当发生终端换行时,要弄清楚哪些数据与哪一列对应可能会很困难。
在这些情况下,您可以以“扩展”(expanded)格式打印结果,该格式本质上是每行的交叉表,在左侧显示列标题,在右侧显示每个值。在这种格式中,您可以一次一个地翻阅结果。
您可以使用命令 \x打开和关闭扩展模式。下面我们展示了数据库中的对象列表,首先是普通表模式,然后是扩展模式。
postgres=# \d
List of relations
Schema | Name | Type | Owner
--------+-------------------------+-------+----------
public | example_tbl | table | postgres
public | pg_stat_statements | view | postgres
public | pg_stat_statements_info | view | postgres
(3 rows)
postgres=# \x
Expanded display is on.
postgres=# \d
List of relations
-[ RECORD 1 ]-------------------
Schema | public
Name | example_tbl
Type | table
Owner | postgres
-[ RECORD 2 ]-------------------
Schema | public
Name | pg_stat_statements
Type | view
Owner | postgres
-[ RECORD 3 ]-------------------
Schema | public
Name | pg_stat_statements_info
Type | view
Owner | postgres
05 退出 psql 会话
最后,我不希望您觉得自己无法摆脱交互式外壳。任何时候你想退出当前psql会话,只需使用元命令 \q 返回到你的终端提示符。
postgres=# \q
ryan@redgate-laptop:~$
06 系统对象和其他详细信息
当我们回顾下面的一些基本命令时,您会注意到一种模式,其中许多命令具有多种形式。在许多命令的末尾添加大写字母S将在输出中包含系统对象。此外,在命令末尾包含符号“+