wrappers

Supabase提供的外部数据源包装器捆绑包

概览

扩展包名版本分类许可证语言
wrappers0.6.0FDWApache-2.0Rust
ID扩展名BinLibLoadCreateTrustReloc模式
8500wrappers-
相关扩展multicorn odbc_fdw jdbc_fdw pgspider_ext

manually upgraded PGRX from 0.16.1 to 0.17.0 by Vonng

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY0.6.01817161514wrappers-
RPMPIGSTY0.6.01817161514wrappers_$v-
DEBPIGSTY0.6.01817161514postgresql-$v-wrappers-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
el9.aarch64
el10.x86_64
el10.aarch64
d12.x86_64
d12.aarch64
d13.x86_64
d13.aarch64
PIGSTY 0.6.0
PIGSTY 0.6.0
PIGSTY 0.6.0
PIGSTY 0.6.0
PIGSTY 0.6.0
u22.x86_64
u22.aarch64
PIGSTY 0.6.0
PIGSTY 0.6.0
PIGSTY 0.6.0
PIGSTY 0.6.0
PIGSTY 0.6.0
u24.x86_64
u24.aarch64
PIGSTY 0.6.0
PIGSTY 0.6.0
PIGSTY 0.6.0
PIGSTY 0.6.0
PIGSTY 0.6.0
u26.x86_64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS
u26.aarch64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS

构建

您可以使用 pig build 命令构建 wrappers 扩展的 RPM / DEB 包:

pig build pkg wrappers         # 构建 RPM / DEB 包

安装

您可以直接安装 wrappers 扩展包的预置二进制包,首先确保 PGDGPIGSTY 仓库已经添加并启用:

pig repo add pgsql -u          # 添加仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

pig install wrappers;          # 当前活跃 PG 版本安装
pig ext install -y wrappers -v 18  # PG 18
pig ext install -y wrappers -v 17  # PG 17
pig ext install -y wrappers -v 16  # PG 16
pig ext install -y wrappers -v 15  # PG 15
pig ext install -y wrappers -v 14  # PG 14
dnf install -y wrappers_18       # PG 18
dnf install -y wrappers_17       # PG 17
dnf install -y wrappers_16       # PG 16
dnf install -y wrappers_15       # PG 15
dnf install -y wrappers_14       # PG 14
apt install -y postgresql-18-wrappers   # PG 18
apt install -y postgresql-17-wrappers   # PG 17
apt install -y postgresql-16-wrappers   # PG 16
apt install -y postgresql-15-wrappers   # PG 15
apt install -y postgresql-14-wrappers   # PG 14

创建扩展

CREATE EXTENSION wrappers;

用法

来源: official README, official docs, v0.6.0 release

wrappers 既是一个用 Rust 编写 PostgreSQL foreign data wrapper 的框架,也是 Supabase 维护的一组 FDW 打包集合。单个扩展会安装多种 wrapper 实现,然后每个 foreign server 再选择自己需要的具体 wrapper 类型。

CREATE EXTENSION wrappers;

典型流程

先为某个 wrapper 创建 server,再通过 foreign table 暴露远端数据:

CREATE SERVER stripe_server
  FOREIGN DATA WRAPPER stripe_wrapper
  OPTIONS (
    api_key_id 'stripe_api_key',
    api_url 'https://api.stripe.com/v1/'
  );

CREATE FOREIGN TABLE stripe_customers (
  id text,
  email text,
  name text,
  description text,
  created timestamp,
  attrs jsonb
)
  SERVER stripe_server
  OPTIONS (
    object 'customers',
    rowid_column 'id'
  );

覆盖范围

上游提供了用于 BigQuery、ClickHouse、DuckDB、MySQL、Redis、S3、Stripe、Snowflake、Slack、Notion、OpenAPI、Infura 等数据库与服务的 wrappers。不同 wrapper 的读写支持差异很大,但 WHEREORDER BYLIMIT 下推是框架的核心能力。

版本说明

v0.6.0 保持了相同的扩展模型,但扩展了 wrapper 目录和行为。官方发布说明特别提到:

  • 新增 OpenAPI FDW 支持
  • 新增 Infura FDW 支持
  • Snowflake timeout_secs table option
  • 多个 wrapper 的写入路径和扫描修复

注意事项

  • 各 wrapper 的选项、支持的对象和写能力差异很大;使用时应查阅官方目录页,确认具体 FDW 的能力。
  • 文档警告,如果 materialized view 依赖 foreign table,logical restore 可能失败,因此应避免这种模式,或依赖物理备份。