PostgreSQL 教程: 使用 pg_duckdb 加速数据分析

七月 8, 2026

摘要:在本教程中,您将学习如何在 PostgreSQL 中使用 pg_duckdb 加速数据分析。

目录

核心观点与背景

  • 当前痛点:PostgreSQL 是业界最受信任的开源关系型数据库,在处理 OLTP(在线事务处理)时表现优异。但在处理 OLAP(在线分析处理)的大型聚合查询时存在瓶颈。传统做法通常需要通过 ETL 将数据导出到专门的数据仓库中才能进行高效分析。
  • 解决方案pg_duckdb 是一个 PostgreSQL 扩展插件,它将 DuckDB 的列式向量化分析引擎直接嵌入到 PostgreSQL 数据库中。
  • 核心价值:用户无需切换数据库,无需迁移或同步数据,只需启用该扩展,即可在一个数据库实例中同时获得强大的 OLTP 与 OLAP 能力。

image

核心原理解析:PostgreSQL 与 DuckDB 的深度对比

由于架构设计的不同,两者在不同场景下各有所长。两者的底层特性对比如下:

对比维度 PostgreSQL (OLTP 冠军) DuckDB (OLAP 利器)
数据存储 行式存储 (Row-oriented):按行读取,分析时即便只需少数列也会读取整行数据,导致 I/O 资源浪费。 列式存储 (Columnar):按列读取压缩数据块,极大节省 I/O 资源并提升分析速度。
执行模型 Volcano 迭代器:逐行处理数据,无法充分利用现代 CPU 缓存和 SIMD 指令。 向量化执行 (Vectorized):批量(数千个值)处理数据,执行效率极高。
并发与并行 基于 MVCC 优化高并发多用户场景(每秒大量小事务);并行查询能力有上限。 针对单一大型复杂查询优化;自动并行化,能够利用所有 CPU 核心。
外部数据源 默认读取数据库内部的表。 原生支持数据湖,可直接读取 Parquet、CSV、JSON、Iceberg 等文件,无论在本地还是对象存储(如 S3 对象存储)上,均无需导入。
架构 传统的 C/S(客户端-服务器)架构。 进程内(In-process)嵌入式数据库,无独立服务端,零配置启动。

image

pg_duckdb 的工作机制

pg_duckdb 的强大之处在于它对应用层的透明性。客户端不需要改变连接方式、协议或 SQL 语句:

  1. 查询拦截:Postgres 解析器生成解析树后,pg_duckdb 会检查该查询是否适合使用分析引擎执行。
  2. 接管与执行:如果适合,生成 DuckDB 执行计划并交由其向量化引擎极速处理;最终将结果通过 Postgres 返回给客户端。
  3. 透明回退 (Automatic Fallback):如果遇到不支持的查询(如 INSERT 或 DuckDB 暂不支持的特定功能),插件会静默将其交还给 Postgres 的原生计划器。保证业务永不中断,零代码侵入。

image

pg_duckdb 的三大核心“超能力”

pg_duckdb 扩展在 PostgreSQL 上的三个关键应用场景:

1. 零代码修改,加速现有表分析

  • 只需开启参数 set duckdb.force_execution = on;
  • 原有针对 Postgres 表的聚合分析查询(如 GROUP BY)会自动路由到 DuckDB 引擎。
  • 测试结果:在 TPC-H 基准测试演示中,相同数据的查询速度相较原生引擎提升了 2 倍至 7 倍不等。

2. 直接读写云端对象存储

image

  • 告别 ETL 管道,无需将海量日志或文件导入数据库中。
  • 可以通过简单的 SQL 函数(如 read_parquet)直接查询存储在 S3 对象存储上的 Parquet 历史文件,甚至可以直接将分析结果写回 S3 对象存储。

3. 最强功能:混合分析

image

  • 场景:能够在一个 SQL 查询中,将 Postgres 中实时的业务表(例如:活跃的投资组合监视列表)与 S3 对象存储中的外部文件(例如:海量的历史股票交易记录 Parquet 文件)进行直接 JOIN 联表查询。
  • 优势:在单一引擎中无缝融合了“热”运行数据与“冷”历史归档数据,没有中间抽取步骤,也没有数据冗余。

核心结论

  1. 一个数据库,两个引擎:兼顾 ACID 事务安全(Postgres)与极速的分析性能(DuckDB)。
  2. 零数据搬运:无需通过管道移动数据,直接使用 SQL 查询数据湖(Data Lake)或对象存储。
  3. 统一的混合分析:单一 SQL 语句即可联合查询活跃的关系型数据与外部大文件。
  4. 相同的 SQL,更快的响应:完全不需要重新学习新系统或修改现有查询代码,仅改变底层计算引擎便可获得极速体验。

参考

pg_duckdb in Action: Accelerating Analytics on Azure Database for PostgreSQL

了解更多

PostgreSQL 管理