跳转到主要内容

1 第一次查询

运行第一次查询,查看 PostgreSQL 服务器与 psql 客户端的版本。

要确认 PostgreSQL 环境是否正常,最快的办法就是运行一个不需要表的查询。PostgreSQL 可以单独计算表达式,并不是每条 SELECT 都需要 FROM。我们将利用这一点,一次确认三件事:服务器正在运行,客户端能够连接到它,而且版本足够新,可以跟着本书练习。

本章要点

  • 如何用 psql -f 运行 SQL 文件
  • 不需要表的最简 SELECT
  • 如何读懂 PostgreSQL 版本字符串
  • 客户端版本与服务器版本的区别

示例

示例 1.1 第一次查询
-- Simplest query: no tables, just a literal
SELECT 1;

-- Arithmetic and string expressions work without a FROM
SELECT 2 + 3 AS sum, 'hello, postgres' AS greeting;

-- Check your PostgreSQL server version
SELECT version();

-- A more readable version, when you only need the number
SHOW server_version;

SELECT 1 返回一行一列,值为整数 1。表达式形式(SELECT 2 + 3, 'hello, postgres')表明,SELECT 中可以直接写任意表达式,由 PostgreSQL 求值并返回结果。version() 是一个内置函数,会返回完整的版本字符串,其中包括操作系统、编译器等信息;SHOW server_version 则只返回版本号。两者报告的都是当前所连接服务器的版本。psql --version 报告的是客户端版本,两者可能不同。

运行示例

在仓库根目录运行这个文件:

$ psql -f source/first-query.sql postgres
 ?column?
----------
        1
(1 row)

 sum | greeting
-----+-----------------
   5 | hello, postgres
(1 row)

                                                    version
------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 17.x on x86_64-pc-linux-gnu, compiled by gcc ...
(1 row)

 server_version
----------------
 17.x
(1 row)

你看到的版本字符串会有所不同。如果输出与上面类似,就说明连接已经打通了。

常见陷阱

  • “could not connect to server” —— 守护进程没有运行。可用 brew services start postgresql(macOS)、sudo systemctl start postgresql(Linux),或安装方式所对应的命令启动它。
  • “role ‘you’ does not exist” —— PostgreSQL 中没有与你的操作系统用户对应的数据库用户。请在能够访问该集群的 Shell 中运行 createuser --superuser $(whoami) 创建用户。
  • “database ‘postgres’ does not exist” —— 某些安装方式,尤其是 macOS 上的 homebrew,不会创建默认的 postgres 数据库。运行一次 createdb postgres,或用 createdb pbe 创建练习库,并在每条命令中将数据库名指定为 pbe。
提示

如果省略数据库名,psql 默认使用你的操作系统用户名。要明确使用 postgres 数据库,运行 psql -f source/first-query.sql postgres。如果想改用连接字符串,则运行 psql 'postgres://user:pass@host:5432/dbname'。

动手练习

运行 psql -f source/first-query.sql 并确认输出。然后用 psql postgres 建立交互式连接,输入 SELECT now(); 并按回车键,最后用 \q 退出。

下载

SQL 文件:first-query.sql · 全部示例文件 · 准备工作