pg_ducklake:PostgreSQL 的列式存储

发布: (2026年3月11日 GMT+8 17:29)
4 分钟阅读
原文: Dev.to

Source: Dev.to

Cover image for pg_ducklake: Columnar Storage for PostgreSQL

GitHub 仓库 中访问 pg_ducklake。

介绍

PostgreSQL 是全球最先进的开源关系数据库1。它拥有现代数据栈中最广泛、最成熟的生态系统,从 AI 集成、JDBC 驱动到 ORM,以及用于监控、备份和复制的强大工具。

然而,PostgreSQL 本质上是为事务设计的行存储,这使得它在处理大规模分析扫描和聚合时不够自然。

与此同时,lakehouse 方法——将存储与计算分离并使用开放的列式文件格式(通常是 Parquet)——正成为分析的默认选择。Delta Lake 和 Apache Iceberg 等表格式推广了这种模型,但由于元数据开销,它们的管理可能比较复杂。

DuckLake 是一个新参与者,它在保留 SQL 目录元数据的同时,将数据存储在开放的 Parquet 文件中。pg_ducklake 位于这两个世界的交叉点,将原生 lakehouse 体验引入 PostgreSQL,同时保持对 DuckDB 生态系统的可访问性。

架构

pg_ducklake 通过桥接三个组件创建统一的体验:

  • PostgreSQL(接口 & 目录) – 你使用熟悉的 PostgreSQL SQL 来管理和查询表,所有表的元数据都原生存储在 PostgreSQL 堆表中。
  • DuckDB(执行引擎) – 向量化的 DuckDB 引擎直接嵌入 PostgreSQL 后端,以高效处理分析扫描和聚合。
  • DuckLake(存储格式) – 数据以 Parquet 文件形式存放在 S3 上,元数据保存在 PostgreSQL 中。这使得外部 DuckDB 客户端(CLI、Python 等)能够访问相同的表。

Architecture diagram

pg_ducklake 带来的价值

目标很简单:正常使用 PostgreSQL,但在需要时获得 lakehouse 风格的表。

  • Postgres 原生的人体工学 – DuckLake 表通过熟悉的 SQL 和工具在 PostgreSQL 中管理,自然融入 Postgres 应用、BI 和分析师工作流。在支持复制的部署(例如 Neon 等无服务器 Postgres 环境)中,你可以通过添加只读副本来扩展读密集型分析。
  • 默认开放表 – Parquet 数据 + PostgreSQL 目录;DuckDB 客户端(CLI、Python 等)可以将 PostgreSQL 作为元数据提供者,读取“原始”DuckLake 表。
  • DuckDB 分析速度 – 向量化执行结合列式存储,提供快速的扫描和聚合。

pg_ducklake 的下一步

pg_ducklake 正在积极开发中,目标是在 PostgreSQL 内实现生产级的 lakehouse 体验。路线图包括以下实用功能:

  • 模式演进
  • 时光旅行
  • 分区 / 布局控制
  • 表维护(压缩 / 垃圾回收)
  • 随着更多真实用户采用项目,提供更清晰的运维指南

非常欢迎反馈和贡献,尤其是实际工作负载、功能需求以及你遇到的任何尖锐问题的报告。

pg_ducklake:PostgreSQL 中的原生 lakehouse 表 — 开放数据,DuckDB 速度。

Footnotes

  1. 引自 PostgreSQL 官方网站

0 浏览
Back to Blog

相关文章

阅读更多 »