jdbc_fdw
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
jdbc_fdw | 1.2 | FDW | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 8530 | jdbc_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 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | MIXED | 1.2 | 1817161514 | jdbc_fdw | - |
| RPM | PIGSTY | 0.5.0 | 1817161514 | jdbc_fdw_$v | java-11-openjdk-headless |
| DEB | PIGSTY | 0.5.0 | 1817161514 | postgresql-$v-jdbc-fdw | default-jre-headless, libpq5 |
构建
您可以使用 pig build 命令构建 jdbc_fdw 扩展的 DEB 包:
pig build pkg jdbc_fdw # 构建 DEB 包
安装
您可以直接安装 jdbc_fdw 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
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 中没有表级选项。外部列按名称映射。当 UPDATE 或 DELETE 需要行标识时,请用 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,因此返回多列的查询需要定义列列表。
重要选项与限制
- 服务器选项:必需的
drivername和url,绝对路径的jarfile,以及querytimeout和 JVM 的maxheapsize。 - 用户映射选项:
username和password。 - 列选项:
key = true标识可写操作中的主键列。 jdbc_exec(connname, sql)执行特定于驱动的 SQL 语句,并可以返回定义的记录集。
0.5.0 版本支持上游项目的谓词、列和聚合下推,但不支持远程 RETURNING、GROUP BY、ORDER BY、类型转换或事务控制语句。数组和外部表 TRUNCATE 未实现。请使用选定驱动程序测试数据类型的转换和写入语义。
保护 JAR 路径和服务器定义免受不可信用户的影响,将密码保存在用户映射中,并限制 JVM 堆大小和远程查询时间。源/包发行版为 0.5.0,而 jdbc_fdw.control 继续声明 SQL 扩展版本 1.2;请使用 pg_extension.extversion 而不是假设这些版本空间是相同的。