jdbc_fdw

访问JDBC可访问的任何外部数据源

概览

扩展包名版本分类许可证语言
jdbc_fdw1.2FDWPostgreSQLC
ID扩展名BinLibLoadCreateTrustReloc模式
8530jdbc_fdw-
相关扩展wrappers multicorn odbc_fdw oracle_fdw mysql_fdw tds_fdw db2_fdw postgres_fdw

Package/source version 0.5.0; SQL extension version 1.2. PIGSTY RPM and DEB packages cover PostgreSQL 14-18 on x86_64 and aarch64; PGDG RPM 0.4.0 is a legacy alternative for PostgreSQL 14-16. Live queries require a JDBC driver and remote database.

版本

类型仓库版本PG 大版本包名依赖
EXTMIXED1.21817161514jdbc_fdw-
RPMPIGSTY0.5.01817161514jdbc_fdw_$vjava-11-openjdk-headless
DEBPIGSTY0.5.01817161514postgresql-$v-jdbc-fdwdefault-jre-headless, libpq5
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.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
u22.x86_64
u22.aarch64
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
u24.x86_64
u24.aarch64
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
u26.x86_64
u26.aarch64

构建

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

pig build pkg jdbc_fdw         # 构建 DEB 包

安装

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

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

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

pig install jdbc_fdw;          # 当前活跃 PG 版本安装
pig ext install -y jdbc_fdw -v 18  # PG 18
pig ext install -y jdbc_fdw -v 17  # PG 17
pig ext install -y jdbc_fdw -v 16  # PG 16
pig ext install -y jdbc_fdw -v 15  # PG 15
pig ext install -y jdbc_fdw -v 14  # PG 14
dnf install -y jdbc_fdw_18       # PG 18
dnf install -y jdbc_fdw_17       # PG 17
dnf install -y jdbc_fdw_16       # PG 16
dnf install -y jdbc_fdw_15       # PG 15
dnf install -y jdbc_fdw_14       # PG 14
apt install -y postgresql-18-jdbc-fdw   # PG 18
apt install -y postgresql-17-jdbc-fdw   # PG 17
apt install -y postgresql-16-jdbc-fdw   # PG 16
apt install -y postgresql-15-jdbc-fdw   # PG 15
apt install -y postgresql-14-jdbc-fdw   # PG 14

创建扩展

CREATE EXTENSION jdbc_fdw;

用法

来源:

jdbc_fdw 将 JDBC 数据源暴露为 PostgreSQL 外部表,并可通过辅助函数执行远程 SQL。当存在合适的 JDBC 驱动但没有更专业的 FDW 时使用它;JVM、驱动 JAR、凭据和远程查询行为都在一个 PostgreSQL 后端进程中运行。

核心工作流程

CREATE EXTENSION jdbc_fdw;

CREATE SERVER reporting_jdbc
  FOREIGN DATA WRAPPER jdbc_fdw
  OPTIONS (
    drivername 'org.postgresql.Driver',
    url 'jdbc:postgresql://db.example/reporting',
    jarfile '/opt/jdbc/postgresql.jar',
    querytimeout '10',
    maxheapsize '256'
  );

CREATE USER MAPPING FOR app_user
  SERVER reporting_jdbc
  OPTIONS (username 'reader', password 'secret');

CREATE FOREIGN TABLE remote_orders (
  id bigint OPTIONS (key 'true'),
  created_at timestamptz,
  total numeric
) SERVER reporting_jdbc;

SELECT * FROM remote_orders WHERE id = 42;

v0.5.0 中没有表级选项。外部列按名称映射。当 UPDATEDELETE 需要行标识时,请用 OPTIONS (key 'true') 标记远程主键列。

导入和直接 SQL

IMPORT FOREIGN SCHEMA public
  FROM SERVER reporting_jdbc
  INTO jdbc_import
  OPTIONS (recreate 'true');

SELECT *
FROM jdbc_exec('reporting_jdbc', 'SELECT id, name FROM customer')
  AS t(id bigint, name text);

上游 README 中提到,IMPORT FOREIGN SCHEMA 当前仅适用于 GridDB。jdbc_exec 返回 record,因此返回多列的查询需要定义列列表。

重要选项与限制

  • 服务器选项:必需的 drivernameurl,绝对路径的 jarfile,以及 querytimeout 和 JVM 的 maxheapsize
  • 用户映射选项:usernamepassword
  • 列选项:key = true 标识可写操作中的主键列。
  • jdbc_exec(connname, sql) 执行特定于驱动的 SQL 语句,并可以返回定义的记录集。

0.5.0 版本支持上游项目的谓词、列和聚合下推,但不支持远程 RETURNINGGROUP BYORDER BY、类型转换或事务控制语句。数组和外部表 TRUNCATE 未实现。请使用选定驱动程序测试数据类型的转换和写入语义。

保护 JAR 路径和服务器定义免受不可信用户的影响,将密码保存在用户映射中,并限制 JVM 堆大小和远程查询时间。源/包发行版为 0.5.0,而 jdbc_fdw.control 继续声明 SQL 扩展版本 1.2;请使用 pg_extension.extversion 而不是假设这些版本空间是相同的。