# 第一次查询

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

---

LLMS 索引： [llms.txt](/llms.txt)

---

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

## 本章要点 {#learn}

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

## 示例 {#example}

```sql {num="1.1" caption="第一次查询"}
-- 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` 报告的是客户端版本，两者可能不同。

## 运行示例 {#run}

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

```text
$ 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)
```

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

## 常见陷阱 {#pitfalls}

- *"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`。

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

> [!NOTE] 动手练习
> 运行 `psql -f source/first-query.sql` 并确认输出。然后用 `psql postgres` 建立交互式连接，输入 `SELECT now();` 并按回车键，最后用 `\q` 退出。

## 下载 {#downloads}

SQL 文件：[first-query.sql](/examples/source/first-query.sql) · [全部示例文件](/examples/examples.zip) · [准备工作](/#prerequisites)
