PostgreSQL 18 发布:关键特性速览与应用实践 – wiki词典

PostgreSQL 18 发布:关键特性速览与应用实践

PostgreSQL 数据库管理系统在 2025 年 9 月 25 日迎来了其重要版本更新——PostgreSQL 18。此版本引入了一系列关键的新特性和增强功能,旨在全面提升数据库的性能、开发体验、操作效率以及安全性,为构建高性能、高可用的现代应用提供了更强大的支持。

PostgreSQL 18 关键特性速览

PostgreSQL 18 的发布不仅包含了功能性的迭代,更在底层架构和开发者友好性方面做出了显著改进。

性能提升

  • 异步 I/O (AIO) 子系统: 这是 PostgreSQL 18 最为引人注目的架构革新之一。通过允许数据库并发地发出多个 I/O 请求,AIO 大幅提升了 I/O 吞吐量并降低了延迟,特别是在读密集型工作负载(如顺序扫描、位图堆扫描和 VACUUM 操作)中,性能提升最高可达 3 倍。
  • 文件到表的并行 COPY: 大大加速了大型 CSV 文件导入的速度,对于数据迁移和批量加载场景尤其有利。
  • SQL 和 PL/pgSQL 函数优化: 通过更智能的内联、执行计划重用以及与并行和 JIT 执行的更好集成,复杂查询中的函数执行效率得到了显著提升。
  • B-tree 跳过扫描(Skip Scan): 这一特性允许 B-tree 索引在查询中即便没有指定所有前导索引列,也能被有效利用,从而加快查询速度。
  • 改进的 Hash 和 Merge 连接: Hash 连接在性能和内存使用方面得到了优化,而 Merge 连接现在支持增量排序,进一步提高了复杂查询的效率。

开发者体验增强

  • JSON_TABLE 支持: PostgreSQL 18 原生支持 SQL 标准的 JSON_TABLE 函数,允许开发者将 JSON 数据像关系型表列一样处理,直接将键、数组和嵌套值投影到结构化、可查询的行中,极大地简化了 JSON 数据的处理。
  • UNIQUE NULLS DISTINCT 约束: 引入了一个新的约束,将 NULL 值视为唯一,解决了之前允许多个 NULL 条目存在于唯一列中的长期行为,提供了更严格的数据完整性控制。
  • UUIDv7 函数: 原生支持生成时间戳有序的 UUID,有助于改善 B-tree 索引性能和数据局部性。
  • 虚拟生成列(默认): 生成列现在默认在读取操作时计算其值,而不是存储在磁盘上,减少了存储占用和更新开销。存储的生成列现在也可以进行逻辑复制。
  • 增强的 RETURNING 子句: INSERTUPDATEDELETEMERGE 命令的 RETURNING 子句现在支持 OLDNEW 关键字,允许显式返回操作前后的值,增强了应用程序的灵活性。
  • 时间约束: 支持对范围施加约束,包括 PRIMARY KEYUNIQUEFOREIGN KEY 约束。

复制和高可用性

  • 逻辑复制的全 DDL 支持: 模式更改(如 CREATE TABLEALTER TABLEDROP)现在可以自动复制到订阅者,大大提升了开发者的工作效率。
  • 序列的逻辑复制: 原生支持序列的复制,有效防止了逻辑复制设置中节点间的 ID 重叠问题。

运维和 DBA 改进

  • pg_stat_io I/O 监控: 新增了一个系统视图,提供了更精细的 I/O 监控能力,增强了可观察性。
  • EXPLAIN VERBOSE 改进: EXPLAIN 命令现在自动包含 BUFFERS 输出,而 EXPLAIN ANALYZE VERBOSE 则显示 WAL 使用情况、CPU 统计信息和平均读取统计信息。
  • pg_upgrade 保留优化器统计信息: 大版本升级的干扰性更小,pg_upgrade 现在保留了规划器统计信息,使得升级后的集群无需长时间的 ANALYZE 运行即可更快地达到预期性能。
  • NOT NULL 约束作为 NOT VALID 允许在不立即扫描整个表的情况下添加 NOT NULL 约束,并在不持有 ACCESS EXCLUSIVE 锁的情况下稍后进行验证,这对于大型表非常有用。

安全性增强

  • OAuth 认证支持: 通过 PostgreSQL 扩展引入了 OAuth 2.0 认证机制。
  • MD5 密码认证弃用: MD5 密码认证已被弃用,并将在未来的版本中移除,建议用户使用 SCRAM 认证。

标准遵循

  • MERGE 增强: 对 SQL 标准 MERGE 行为的改进支持,提供了更清晰的 UPSERT 功能,具有更好的条件逻辑解析和更少的边缘情况。

PostgreSQL 18 应用实践

PostgreSQL 18 的这些新特性为应用程序开发和数据库管理带来了新的机遇。在实践中,开发者和 DBA 可以考虑以下几个方面:

  • 充分利用异步 I/O: 对于 I/O 密集型应用,尤其是那些在云环境或虚拟化环境中运行的应用,应重点关注 AIO 带来的性能提升。确保操作系统和硬件配置能够支持 AIO,并进行充分的基准测试以验证性能收益。
  • 优化 JSON 数据处理: 借助 JSON_TABLE 函数,开发者可以更高效、更直观地处理存储在 JSONB 列中的半结构化数据,简化复杂查询并提高数据分析能力。
  • 采纳 UUIDv7: 在需要生成全局唯一标识符的场景中,优先考虑使用 UUIDv7。其时间有序性有助于提升 B-tree 索引的写入性能和查询效率,特别是在分布式系统或高并发写入场景下。
  • 合理使用虚拟生成列: 对于那些可以从其他列派生且不需要物理存储的计算结果,使用虚拟生成列可以显著减少存储空间和更新开销。在考虑物理存储时,存储的生成列现在可以与逻辑复制协同工作,简化了数据同步。
  • 提升数据库可观察性: 利用 pg_stat_io 和增强的 EXPLAIN VERBOSE 功能,DBA 和开发者可以更深入地理解数据库的 I/O 行为和查询执行计划,从而更精确地进行性能调优。
  • 规划更平滑的升级: pg_upgrade 能够保留优化器统计信息,意味着升级到 PostgreSQL 18 后,数据库的性能将更快地恢复到最佳状态,减少了升级后的性能波动。
  • 强化安全实践: 随着 OAuth 认证的支持和 MD5 密码认证的弃用,应逐步迁移到更安全的认证方式(如 SCRAM),并探索 OAuth 在应用程序中的集成,以提高整体安全性。
  • 持续优化架构和查询: 尽管 PostgreSQL 18 带来了诸多性能改进,良好的数据库设计和查询优化仍然是关键。继续遵循最佳实践,例如:
    • 高效的 Schema 设计: 选择合适的数据类型,为所有表定义主键,合理进行数据库范式化。
    • 索引策略:WHEREJOINGROUP BY 子句中使用的列上建立索引,并注意避免过度索引。
    • 查询优化: 使用 EXPLAIN ANALYZE 识别并优化慢查询,避免使用 SELECT *,并留意 ORM 工具可能生成的低效查询。
    • 连接管理: 使用连接池(如 PgBouncer)高效管理数据库连接。
    • 配置调优: 根据应用需求调整 shared_bufferswork_mem 等数据库参数。
    • 定期维护: 定期运行 ANALYZEVACUUM
    • 数据分区: 对于大型数据集,考虑对表进行分区。
    • 安全实践: 绝不在代码库中存储数据库凭据,使用环境变量,并定期轮换凭据,通过角色和最小权限原则来加强访问控制。

PostgreSQL 18 的发布,无疑进一步巩固了其作为世界最先进开源关系型数据库的地位。通过充分理解和应用这些新特性,开发者和 DBA 能够构建更强大、更高效、更安全的应用程序和数据库系统。

滚动至顶部