全新上线的 PostgreSQL 18

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

Kyle ChungKyle Chung

速度突破,功能革新。

PostgreSQL 18

漫长的等待终于结束。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 索引的性能和缓存效率,从而在加快插入和更新速度的同时,避免了随机键值导致的索引膨胀问题。
-- 使用 UUIDv7 作为主键创建数据表
CREATE TABLE orders (
    id UUID PRIMARY KEY DEFAULT uuidv7(),
    total DECIMAL(10,2),
    created_at TIMESTAMP DEFAULT NOW()
);

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

衍生字段变得更智能了。在 Postgres 18 中,它们现在默认为 VIRTUAL(虚拟)。

  • 它是什么: 字段的值在读取时动态计算,而不是在写入时计算并存储在磁盘上。
  • 为何更好: 这通过消除冗余数据显著节省了磁盘空间,并加快了 INSERTUPDATE 操作。它非常适合衍生数据,例如根据 monthly_salary 计算 annual_salary
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 筛选,您也可以高效地按 categorysale_date 进行查询,使现有索引在分析和报告方面功能更强大。

4. 在 RETURNING 中访问 OLDNEW

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

-- 更新价格并在一个查询中同时查看新旧值
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