# 全新上线的 PostgreSQL 18

> 突破性的速度。重大的新功能。

## 速度突破，功能革新。
#

<img src="https://cdn-console.zeabur.com/f/EoBSX/psql18inblog.png" alt="PostgreSQL 18" className="w-full rounded-xl" />

漫长的等待终于结束。PostgreSQL 全球开发组已正式发布 **PostgreSQL 18**，延续其近十年来每年秋季发布重大更新的传统。这不仅是一次常规的增量更新，更是一个里程碑式的版本，包含了 **202 项新功能**——比去年增加了 25%。

对于依赖这款全球最受欢迎的数据库的开发者和团队而言，PostgreSQL 18 实现了三大核心承诺：革命性的性能、编写更少代码的强大新工具，以及更智能、更安全的操作。

下面，让我们深入剖析这些将对您的应用程序产生最大影响的功能，并向您展示如何立即在 Zeabur 上开始使用它们。

---

### 性能的量子飞跃：异步 I/O

PostgreSQL 18 中最引人注目的无疑是全新的**异步 I/O (AIO) 子系统**。这是一项旨在彻底解决数据库最大性能瓶颈之一的基础性升级：等待数据在磁盘和内存之间传输所花费的时间。

**过去的问题：** 以前，当 Postgres 需要从磁盘读取数据时，它必须暂停并等待该操作完成，然后才能继续执行其他任务。这就像打一个电话然后一直在线等待，宝贵的 CPU 周期被白白浪费，而这些资源本可以用于处理其他工作。

**AIO 的解决方案：** PostgreSQL 18 彻底改变了这一模式。现在，数据库可以同时发出多个 I/O 请求，并在磁盘处理这些请求时并行处理其他任务。CPU 资源得以保持空闲，使查询和后台操作能够同时进行。

**这对您意味着什么：**
初步的博客文章和基准测试显示，对于顺序扫描和 vacuum 等 I/O 密集型工作负载，性能提升可达 **2 到 3 倍**。对您的应用程序而言，这意味着：

- **更快的查询执行：** 您的应用响应更灵敏。
- **更高的吞吐量：** 分析和机器学习管道能更快地处理数据。
- **更高的硬件效率：** 无需修改任何一行应用程序代码，就能从现有 CPU 中获得更强的性能。

---

### 赋能开发者：更强功能，更少代码

Postgres 18 引入了多项改善开发体验的功能，不仅解决了长期以来的争论，还让日常开发工作变得更轻松、更高效。

#### 1. 原生支持 UUIDv7

关于主键应该使用 `SERIAL` 还是 `UUID` 的争论几乎可以告一段落了。PostgreSQL 18 引入了原生的 `uuidv7()` 函数。

- **它是什么：** 一种嵌入了时间戳的新标准 UUID 格式。
- **为何更好：** 与随机的 UUIDv4 不同，UUIDv7 的值是自然有序的。这极大地提升了 B-tree 索引的性能和缓存效率，从而在**加快插入和更新速度**的同时，避免了随机键值导致的索引膨胀问题。

```sql
-- 使用 UUIDv7 作为主键创建数据表
CREATE TABLE orders (
    id UUID PRIMARY KEY DEFAULT uuidv7(),
    total DECIMAL(10,2),
    created_at TIMESTAMP DEFAULT NOW()
);
```

#### 2. 虚拟衍生字段成为默认选项

衍生字段变得更智能了。在 Postgres 18 中，它们现在默认为 `VIRTUAL`（虚拟）。

- **它是什么：** 字段的值在读取时动态计算，而不是在写入时计算并存储在磁盘上。
- **为何更好：** 这通过消除冗余数据显著节省了磁盘空间，并加快了 `INSERT` 和 `UPDATE` 操作。它非常适合衍生数据，例如根据 `monthly_salary` 计算 `annual_salary`。

```sql
CREATE TABLE employees (
    salary DECIMAL(10,2),
    -- 'VIRTUAL' 现在是默认值，无需额外关键字
    annual_salary DECIMAL(12,2) GENERATED ALWAYS AS (salary * 12)
);
```

#### 3. 更智能的索引：B-tree 跳跃扫描

此功能消除了多字段索引一个长期存在的限制。以前，如果您在 `(region, category, sale_date)` 上创建了索引，只有当查询条件包含前导字段 `region` 时，才能高效地使用该索引。

- **它是什么：** 通过跳跃扫描，Postgres 可以智能地"跳过"被省略的前缀字段中的不同值。
- **为何更好：** 您的多字段索引变得更加灵活。现在，即使不按 `region` 筛选，您也可以高效地按 `category` 和 `sale_date` 进行查询，使现有索引在分析和报告方面功能更强大。

#### 4. 在 `RETURNING` 中访问 `OLD` 和 `NEW` 值

`RETURNING` 子句的功能得到了极大的增强。您现在可以在单个语句中同时访问更新前 (`OLD`) 和更新后 (`NEW`) 的值。这对于创建审计日志或处理复杂逻辑来说是一个巨大的进步，无需再使用触发器或额外的查询。

```sql
-- 更新价格并在一个查询中同时查看新旧值
UPDATE products
SET price = price * 1.10
WHERE name = 'Widget'
RETURNING
    name,
    old.price AS old_price,
    new.price AS new_price;
```

---

### 更智能、更安全的操作

PostgreSQL 18 还包含了一些能够减轻运维负担、帮助您构建更稳健系统的功能。

- **内置 OAuth 2.0 认证：** 这对企业用户来说是一项重大利好。您现在可以将身份验证委托给 Google、Auth0 或 Okta 等身份提供商。这集中管理了凭据，并允许应用程序使用访问令牌而不是密码进行连接。
- **时间约束 (`WITHOUT OVERLAPS`)：** 您现在可以在 schema 层面强制执行基于时间的完整性。这能确保表中的时间范围不会错误地重叠——非常适用于调度系统、预订系统或员工合同。它保证了甘特图上的"时间条"在不应重叠时绝不重叠。
- **改进的 `EXPLAIN` 输出：** 查询优化变得更容易了。`EXPLAIN ANALYZE` 的输出现在**默认包含缓冲区使用信息**，帮助您即时发现以前容易忽略的 I/O 性能问题。

---

### 立即在 Zeabur 上部署 PostgreSQL 18

了解这些功能固然很好，但亲身体验更佳。我们很高兴地宣布，**PostgreSQL 18 现已在 Zeabur 上线，可供部署。**

您只需一键即可启动一个全新的、完全配置好的 PostgreSQL 18 服务，将从异步 I/O 到原生 UUIDv7 的所有强大功能尽握手中。亲身体验这场速度与功能的革命吧。

[**立即部署 PostgreSQL 18**](https://zeabur.com/templates/B20CX0)
