原 PG通过tds_fdw访问SQL Server数据库
Tags: 原创PGMSSQLSQL ServerPostgreSQL插件DBLink跨库访问tds_fdw
简介
GitHub:https://github.com/tds-fdw/tds_fdw
相关文档:
https://github.com/tds-fdw/tds_fdw/blob/master/ForeignTableCreation.md
https://github.com/tds-fdw/tds_fdw/blob/master/ForeignServerCreation.md
https://github.com/tds-fdw/tds_fdw/blob/master/UserMappingCreation.md
https://github.com/tds-fdw/tds_fdw/blob/master/ForeignSchemaImporting.md
https://github.com/tds-fdw/tds_fdw/blob/master/Variables.md
A PostgreSQL foreign data wrapper to connect to TDS databases (Sybase and Microsoft SQL Server)
tds_fdw
是 PostgreSQL 的一个外部数据包装器(Foreign Data Wrapper, FDW),它允许 PostgreSQL 通过 ODBC(Open Database Connectivity)访问外部的 Microsoft SQL Server 数据库。使用 tds_fdw
,可以将 SQL Server 数据库中的表和视图映射为 PostgreSQL 中的外部表,从而使 PostgreSQL 可以像访问本地表一样查询 SQL Server 数据。
主要功能和特点
跨平台兼容性:
tds_fdw
通过 FreeTDS 和 ODBC 驱动程序实现,与各种 SQL Server 版本兼容,包括 SQL Server 2000 及更高版本。透明查询:使用
tds_fdw
后,SQL Server 的表可以像 PostgreSQL 的本地表一样使用,用户可以在 PostgreSQL 中执行 SELECT、INSERT、UPDATE 和 DELETE 等 SQL 操作。灵活配置:用户可以通过创建外部服务器(Foreign Server)、外部表(Foreign Table)和用户映射(User Mapping)等方式,灵活配置如何连接和访问外部 SQL Server 数据。
支持复杂查询:
tds_fdw
支持 PostgreSQL 的复杂查询功能,包括连接查询、子查询、排序和聚合等。
典型用例
- 数据迁移:将 SQL Server 的数据迁移到 PostgreSQL 数据库中,
tds_fdw
提供了一种方便的方式来逐步迁移或同步数据。 - 混合查询:在一个查询中同时访问 PostgreSQL 和 SQL Server 中的数据,实现跨数据库的联邦查询。
- 数据整合:将来自不同数据源的数据整合在一起,便于数据分析和报告。
安装与配置
安装 FreeTDS
首先需要安装 FreeTDS,这是一个开源的库,支持通过 TDS(Tabular Data Stream)协议访问 SQL Server。
123yum install gcc -yyum install freetds freetds-libs freetds-devel -y安装
tds_fdw
可以使用 PostgreSQL 扩展机制安装
tds_fdw
,通常通过CREATE EXTENSION tds_fdw;
命令来启用。12345678910111213-- yum安装yum list | grep tdssudo yum install tds_fdw11.x86_64wget https://download.postgresql.org/pub/repos/yum/15/redhat/rhel-7-x86_64/tds_fdw_15-2.0.3-1.rhel7.x86_64.rpm-- 编译wget https://github.com/tds-fdw/tds_fdw/archive/refs/tags/v2.0.3.zipunzip tds_fdw-master.zipcd tds_fdw-2.0.3make USE_PGXS=1make USE_PGXS=1 install日志:
12345678910111213141516171819[pg15@lhrpgall tds_fdw-2.0.3]$ make USE_PGXS=1gcc -std=gnu99 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fPIC -I./include/ -fvisibility=hidden -I. -I./ -I/pg15/pg15/include/postgresql/server -I/pg15/pg15/include/postgresql/internal -D_GNU_SOURCE -c -o src/tds_fdw.o src/tds_fdw.cgcc -std=gnu99 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fPIC -I./include/ -fvisibility=hidden -I. -I./ -I/pg15/pg15/include/postgresql/server -I/pg15/pg15/include/postgresql/internal -D_GNU_SOURCE -c -o src/options.o src/options.cgcc -std=gnu99 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fPIC -I./include/ -fvisibility=hidden -I. -I./ -I/pg15/pg15/include/postgresql/server -I/pg15/pg15/include/postgresql/internal -D_GNU_SOURCE -c -o src/deparse.o src/deparse.cgcc -std=gnu99 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fPIC -shared -o tds_fdw.so src/tds_fdw.o src/options.o src/deparse.o -L/pg15/pg15/lib -Wl,--as-needed -Wl,-rpath,'/pg15/pg15/lib',--enable-new-dtags -lsybdbcp sql/tds_fdw.sql sql/tds_fdw--2.0.3.sqlcp README.md README.tds_fdw.md[pg15@lhrpgall tds_fdw-2.0.3]$ pwd/soft/tds_fdw-2.0.3[pg15@lhrpgall tds_fdw-2.0.3]$[pg15@lhrpgall tds_fdw-2.0.3]$ make USE_PGXS=1 install/usr/bin/mkdir -p '/pg15/pg15/lib/postgresql'/usr/bin/mkdir -p '/pg15/pg15/share/postgresql/extension'/usr/bin/mkdir -p '/pg15/pg15/share/postgresql/extension'/usr/bin/mkdir -p '/pg15/pg15/share/doc/postgresql/extension'/usr/bin/install -c -m 755 tds_fdw.so '/pg15/pg15/lib/postgresql/tds_fdw.so'/usr/bin/install -c -m 644 .//tds_fdw.control '/pg15/pg15/share/postgresql/extension/'/usr/bin/install -c -m 644 .//sql/tds_fdw--2.0.3.sql '/pg15/pg15/share/postgresql/extension/'/usr/bin/install -c -m 644 .//README.tds_fdw.md '/pg15/pg15/share/doc/postgresql/extension/'配置连接:
还是四部曲:extension -> server -> user mapping -> foreign table
extension
1CREATE EXTENSION tds_fdw;创建外部服务器:
本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!