tds_fdw
TDS 数据库(Sybase/SQL Server)外部数据包装器
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
tds_fdw | 2.0.5 | FDW | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 8620 | tds_fdw | 否 | 是 | 否 | 是 | 否 | 是 | - |
| 相关扩展 | mysql_fdw oracle_fdw babelfishpg_tsql babelfishpg_tds wrappers odbc_fdw jdbc_fdw db2_fdw |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PGDG | 2.0.5 | 1817161514 | tds_fdw | - |
| RPM | PGDG | 2.0.5 | 1817161514 | tds_fdw_$v | - |
| DEB | PGDG | 2.0.5 | 1817161514 | postgresql-$v-tds-fdw | - |
安装
您可以直接安装 tds_fdw 扩展包的预置二进制包,首先确保 PGDG 仓库已经添加并启用:
pig repo add pgdg -u # 添加 PGDG 仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install tds_fdw; # 当前活跃 PG 版本安装
pig ext install -y tds_fdw -v 18 # PG 18
pig ext install -y tds_fdw -v 17 # PG 17
pig ext install -y tds_fdw -v 16 # PG 16
pig ext install -y tds_fdw -v 15 # PG 15
pig ext install -y tds_fdw -v 14 # PG 14
dnf install -y tds_fdw_18 # PG 18
dnf install -y tds_fdw_17 # PG 17
dnf install -y tds_fdw_16 # PG 16
dnf install -y tds_fdw_15 # PG 15
dnf install -y tds_fdw_14 # PG 14
apt install -y postgresql-18-tds-fdw # PG 18
apt install -y postgresql-17-tds-fdw # PG 17
apt install -y postgresql-16-tds-fdw # PG 16
apt install -y postgresql-15-tds-fdw # PG 15
apt install -y postgresql-14-tds-fdw # PG 14
创建扩展:
CREATE EXTENSION tds_fdw;
用法
创建服务器
CREATE EXTENSION tds_fdw;
CREATE SERVER mssql_svr
FOREIGN DATA WRAPPER tds_fdw
OPTIONS (servername '127.0.0.1', port '1433',
database 'tds_fdw_test', tds_version '7.1');
服务器选项: servername(服务器地址或 DSN,支持逗号分隔的故障转移列表)、port、database、dbuse(0 为直接连接,非0 使用 dbuse())、tds_version(协议版本)、language、character_set、msg_handler(notice 或 blackhole)、sqlserver_ansi_mode、fdw_startup_cost、fdw_tuple_cost。
创建用户映射
CREATE USER MAPPING FOR postgres
SERVER mssql_svr
OPTIONS (username 'sa', password 'secret');
对于 Azure SQL 数据库,username 选项使用 username@servername 格式。
创建外部表
直接映射远程表:
CREATE FOREIGN TABLE mssql_table (
id integer,
name varchar(255),
value numeric(10,2)
)
SERVER mssql_svr
OPTIONS (schema_name 'dbo', table_name 'mytable');
或使用自定义 SQL 查询:
CREATE FOREIGN TABLE mssql_query (
id integer,
name varchar(255),
total numeric(10,2)
)
SERVER mssql_svr
OPTIONS (query 'SELECT id, name, SUM(amount) AS total FROM orders GROUP BY id, name');
表选项: table_name 或 query(二选一,互斥)、schema_name、match_column_names(按名称匹配还是按位置匹配)、use_remote_estimate、row_estimate_method(execute 或 showplan_all)。
列选项: column_name(本地列名不同于远程时使用)。
查询和调试
SELECT * FROM mssql_table WHERE id > 100;
-- 查看发送到 SQL Server 的远程查询
EXPLAIN (VERBOSE) SELECT * FROM mssql_table WHERE id > 100;
导入外部模式
IMPORT FOREIGN SCHEMA dbo
FROM SERVER mssql_svr
INTO public;