漫长的等待终于结束。PostgreSQL 全球开发组已正式发布 PostgreSQL 18,延续其近十年来每年秋季发布重大更新的传统。这不仅是一次常规的增量更新,更是一个里程碑式的版本,包含了 202 项新功能——比去年增加了 25%。
对于依赖这款全球最受欢迎的数据库的开发者和团队而言,PostgreSQL 18 实现了三大核心承诺:革命性的性能、编写更少代码的强大新工具,以及更智能、更安全的操作。
下面,让我们深入剖析这些将对您的应用程序产生最大影响的功能,并向您展示如何立即在 Zeabur 上开始使用它们。
PostgreSQL 18 中最引人注目的无疑是全新的异步 I/O (AIO) 子系统。这是一项旨在彻底解决数据库最大性能瓶颈之一的基础性升级:等待数据在磁盘和内存之间传输所花费的时间。
过去的问题: 以前,当 Postgres 需要从磁盘读取数据时,它必须暂停并等待该操作完成,然后才能继续执行其他任务。这就像打一个电话然后一直在线等待,宝贵的 CPU 周期被白白浪费,而这些资源本可以用于处理其他工作。
AIO 的解决方案: PostgreSQL 18 彻底改变了这一模式。现在,数据库可以同时发出多个 I/O 请求,并在磁盘处理这些请求时并行处理其他任务。CPU 资源得以保持空闲,使查询和后台操作能够同时进行。
这对您意味着什么: 初步的博客文章和基准测试显示,对于顺序扫描和 vacuum 等 I/O 密集型工作负载,性能提升可达 2 到 3 倍。对您的应用程序而言,这意味着:
Postgres 18 引入了多项改善开发体验的功能,不仅解决了长期以来的争论,还让日常开发工作变得更轻松、更高效。
关于主键应该使用 SERIAL 还是 UUID 的争论几乎可以告一段落了。PostgreSQL 18 引入了原生的 uuidv7() 函数。
-- 使用 UUIDv7 作为主键创建数据表
CREATE TABLE orders (
id UUID PRIMARY KEY DEFAULT uuidv7(),
total DECIMAL(10,2),
created_at TIMESTAMP DEFAULT NOW()
);
衍生字段变得更智能了。在 Postgres 18 中,它们现在默认为 VIRTUAL(虚拟)。
INSERT 和 UPDATE 操作。它非常适合衍生数据,例如根据 monthly_salary 计算 annual_salary。CREATE TABLE employees (
salary DECIMAL(10,2),
-- 'VIRTUAL' 现在是默认值,无需额外关键字
annual_salary DECIMAL(12,2) GENERATED ALWAYS AS (salary * 12)
);
此功能消除了多字段索引一个长期存在的限制。以前,如果您在 (region, category, sale_date) 上创建了索引,只有当查询条件包含前导字段 region 时,才能高效地使用该索引。
region 筛选,您也可以高效地按 category 和 sale_date 进行查询,使现有索引在分析和报告方面功能更强大。RETURNING 中访问 OLD 和 NEW 值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 还包含了一些能够减轻运维负担、帮助您构建更稳健系统的功能。
WITHOUT OVERLAPS): 您现在可以在 schema 层面强制执行基于时间的完整性。这能确保表中的时间范围不会错误地重叠——非常适用于调度系统、预订系统或员工合同。它保证了甘特图上的"时间条"在不应重叠时绝不重叠。EXPLAIN 输出: 查询优化变得更容易了。EXPLAIN ANALYZE 的输出现在默认包含缓冲区使用信息,帮助您即时发现以前容易忽略的 I/O 性能问题。了解这些功能固然很好,但亲身体验更佳。我们很高兴地宣布,PostgreSQL 18 现已在 Zeabur 上线,可供部署。
您只需一键即可启动一个全新的、完全配置好的 PostgreSQL 18 服务,将从异步 I/O 到原生 UUIDv7 的所有强大功能尽握手中。亲身体验这场速度与功能的革命吧。