odbc_fdw

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

概览

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

Package/source version 0.6.1; SQL extension version 0.5.2. Live queries require an installed ODBC driver and configured DSN.

版本

类型仓库版本PG 大版本包名依赖
EXTMIXED0.5.21817161514odbc_fdw-
RPMPGDG0.6.11817161514odbc_fdw_$vunixODBC
DEBPIGSTY0.6.11817161514postgresql-$v-odbc-fdwlibodbc2
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.1
PIGSTY 0.6.1
PIGSTY 0.6.1
PIGSTY 0.6.1
PIGSTY 0.6.1
u22.x86_64
PIGSTY 0.6.1
PIGSTY 0.6.1
PIGSTY 0.6.1
PIGSTY 0.6.1
PIGSTY 0.6.1
u22.aarch64
PIGSTY 0.6.1
PIGSTY 0.6.1
PIGSTY 0.6.1
PIGSTY 0.6.1
PIGSTY 0.6.1
u24.x86_64
PIGSTY 0.6.1
PIGSTY 0.6.1
PIGSTY 0.6.1
PIGSTY 0.6.1
PIGSTY 0.6.1
u24.aarch64
PIGSTY 0.6.1
PIGSTY 0.6.1
PIGSTY 0.6.1
PIGSTY 0.6.1
PIGSTY 0.6.1
u26.x86_64
u26.aarch64

构建

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

pig build pkg odbc_fdw         # 构建 DEB 包

安装

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

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

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

pig install odbc_fdw;          # 当前活跃 PG 版本安装
pig ext install -y odbc_fdw -v 18  # PG 18
pig ext install -y odbc_fdw -v 17  # PG 17
pig ext install -y odbc_fdw -v 16  # PG 16
pig ext install -y odbc_fdw -v 15  # PG 15
pig ext install -y odbc_fdw -v 14  # PG 14
dnf install -y odbc_fdw_18       # PG 18
dnf install -y odbc_fdw_17       # PG 17
dnf install -y odbc_fdw_16       # PG 16
dnf install -y odbc_fdw_15       # PG 15
dnf install -y odbc_fdw_14       # PG 14
apt install -y postgresql-18-odbc-fdw   # PG 18
apt install -y postgresql-17-odbc-fdw   # PG 17
apt install -y postgresql-16-odbc-fdw   # PG 16
apt install -y postgresql-15-odbc-fdw   # PG 15
apt install -y postgresql-14-odbc-fdw   # PG 14

创建扩展

CREATE EXTENSION odbc_fdw;

用法

来源:

odbc_fdw 将 ODBC 数据源中的表或驱动程序特定查询暴露为 PostgreSQL 外部表。它主要是一个跨异构系统的读取/查询桥梁;在依赖其进行生产查询之前,请验证数据类型转换和远程驱动行为。

核心工作流程

CREATE EXTENSION odbc_fdw;

-- In 0.6.1 a superuser must set the server-level dsn or driver option.
CREATE SERVER warehouse_odbc
  FOREIGN DATA WRAPPER odbc_fdw
  OPTIONS (dsn 'warehouse');

CREATE USER MAPPING FOR analyst
  SERVER warehouse_odbc
  OPTIONS (odbc_UID 'reporter', odbc_PWD 'secret');

CREATE FOREIGN TABLE remote_customer (
  id bigint,
  name text,
  created_at timestamp
) SERVER warehouse_odbc
  OPTIONS (schema 'sales', table 'customer');

SELECT * FROM remote_customer WHERE id = 42;

使用 driver 替代 dsn 进行无 DSN 连接。其他驱动程序属性使用 odbc_ 前缀,并可放置在服务器、用户映射或外部表上。将凭据放在用户映射中。对大小写敏感的属性名称进行引号引用,必要时用花括号包裹包含 =; 的值。

查询和导入

sql_query 覆盖 table;当 FDW 需要显式行数查询时,请与 sql_count 结合使用:

CREATE FOREIGN TABLE active_customer (
  id bigint,
  name text
) SERVER warehouse_odbc
  OPTIONS (
    sql_query 'SELECT id, name FROM sales.customer WHERE active = 1',
    sql_count 'SELECT count(*) FROM sales.customer WHERE active = 1'
  );

IMPORT FOREIGN SCHEMA sales
  FROM SERVER warehouse_odbc
  INTO imported
  OPTIONS (prefix 'odbc_');

重要对象和选项

  • dsndriver 选择 ODBC 数据源;0.6.1 版本限制这些服务器选项仅对超级用户可用,因为驱动程序管理器加载共享库。
  • schematablesql_querysql_count 选择远程关系或查询。
  • prefix 改变由 IMPORT FOREIGN SCHEMA 创建的本地名称。
  • ODBCTablesList(server_name, ...) 列出可见的远程表。
  • ODBCTableSize(server_name, table_name)ODBCQuerySize(server_name, query) 返回远程行数。

0.6.0 版本恢复了兼容性并修复了最近 PostgreSQL 发行版上的崩溃。0.6.1 版本转义了远程字面量和标识符以防止 SQL 注入,限制了驱动程序选择,并在调试连接字符串中屏蔽了常见的凭据属性。升级前请允许委派 FDW 使用,同时保留正常的服务器所有权和用户映射控制。

仅支持上游 README 中列出的 ODBC 类型。标识符长度、驱动程序 SQL 语法、编码、空值处理和二进制值可能会有所不同。源/包版本为 0.6.1,而控制文件和安装 SQL 继续声明扩展版本 0.5.2。