duckdb_fdw
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
duckdb_fdw | 2.0.2 | OLAP | MIT | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 2470 | duckdb_fdw | 否 | 是 | 否 | 是 | 否 | 是 | - |
| 相关扩展 | pg_duckdb pg_ducklake pg_mooncake pg_clickhouse pg_parquet pg_lake aws_s3 file_fdw pg_bulkload pg_stat_ch |
|---|
PGSTY 2.0.2 embeds DuckDB 2.0.0 statically, has no pg_duckdb runtime dependency, and conflicts with pg_duckdb for the same PG major. Switching from pg_duckdb requires removing its preload setting and restarting. Current builds support PG15-18; PG14 fails upstream boolVal/makeBoolean API use despite the README claiming PG13-18. Historical PG14 1.4.3 packages remain available.
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 2.0.2 | 1817161514 | duckdb_fdw | - |
| RPM | PIGSTY | 2.0.2 | 1817161514 | duckdb_fdw_$v | - |
| DEB | PIGSTY | 2.0.2 | 1817161514 | postgresql-$v-duckdb-fdw | - |
构建
您可以使用 pig build 命令构建 duckdb_fdw 扩展的 RPM / DEB 包:
安装
您可以直接安装 duckdb_fdw 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
使用 pig 或者是 apt/yum/dnf 安装扩展:
创建扩展:
用法
来源:
duckdb_fdw 2.0.2 通过 DuckDB 原生 C API,将 DuckDB 表和数据源映射为 PostgreSQL 外部表。可用于查询 DuckDB 数据库、读取 Parquet,或访问可选的 DuckDB 目录。外部表支持读取和插入,不支持通过 FDW 执行 PostgreSQL UPDATE 和 DELETE。
启用并映射 DuckDB 表
以超级用户创建扩展。全新安装无需预加载,也无需重启 PostgreSQL。持久化 DuckDB 文件应放在 PostgreSQL 服务账户可访问的目录中;以下示例假定目录已经存在。
系统目录查询返回扩展版本;duckdb_fdw_version() 虽然使用这个名称,实际返回的是所链接的 DuckDB 引擎版本。无需凭据的本地文件可以不创建用户映射。数据库文件访问使用 PostgreSQL 操作系统账户的权限。
导入表与读取 Parquet
这里应使用 DuckDB 的模式名,通常是 main,而非 PostgreSQL 的 public。读取已有 Parquet 文件时,应声明与文件匹配的 PostgreSQL 列类型:
选项与权限
| 对象 | 用途 |
|---|---|
服务器 database | DuckDB 文件路径,或仅在当前连接内存在的内存数据库 |
服务器 force_readonly | 以只读方式打开文件库,并拒绝 FDW 写入及辅助函数中的非只读语句 |
服务器 extensions、attach_catalogs | 加载可选 DuckDB 扩展并附加目录 |
表 table | 映射 DuckDB 表或 Parquet 路径 |
列 column_name | 将 PostgreSQL 列映射到不同名称的 DuckDB 列 |
duckdb_execute(server, statement) | 执行 DuckDB SQL,返回 void,不返回结果表 |
duckdb_create_s3_secret(...) | 在 DuckDB 连接中创建 S3 密钥对象 |
duckdb_fdw_preflight() | 使用 DuckDB 前检查运行时兼容性 |
只向应用角色授予必需的外部服务器、模式和外部表权限。安装时会撤销 PUBLIC 对任意 SQL 和密钥辅助函数的 EXECUTE 权限;仅应向可信角色授予这些权限。
S3、MotherDuck 和 Quack 凭据应优先存入用户映射。服务器选项可从 PostgreSQL 系统目录中读取,不适合存放秘密。远程数据源还依赖相应 DuckDB 扩展、网络访问和凭据,安装 FDW 本身不代表这些条件已经满足。
连接与事务边界
- 默认在事务结束时关闭连接。使用
database ':memory:'时,应在同一个显式事务中完成初始化和查询,否则临时数据库会消失。 duckdb_fdw.keep_connection默认关闭。开启后会在提交后保留连接,但可写文件连接也会跨事务持有 DuckDB 文件锁,可能阻止其他 PostgreSQL 会话打开该文件。- 外部表插入跟随最外层 PostgreSQL 事务提交或回滚。保存点回滚不会单独撤销 DuckDB 写入:如果外层事务提交,已中止子事务中的写入仍可能保留。
- DuckDB 不参与 PostgreSQL 两阶段提交。不要使用预备事务,也不要假定 PostgreSQL 与 DuckDB 能在崩溃时保证原子提交。经辅助函数发送的任意 SQL 也不会自动获得 PostgreSQL 的事务语义。
兼容性与升级
Pigsty 2.0.2 软件包面向 PostgreSQL 15-18。上游 README 声称支持 PostgreSQL 13-18,范围大于这批软件包。2.0.2 接受 DuckDB 1.5.x 和 2.0.x 运行时,相比 2.0.1 不改变 SQL 函数集合。
运行时保护会阻止在同一后端中加载 pg_duckdb 后执行 DuckDB 操作。应将两个扩展放在不同 PostgreSQL 实例中。从预加载 pg_duckdb 的配置切换时,需移除其预加载项并重启 PostgreSQL;替换文件不会卸载已有进程中的库。
安装匹配文件后,使用新的后端会话,并逐库更新:
这个页面对您有帮助吗?
感谢反馈,我们会据此改进这篇文档。
哪里没有解决?(可选)