如何从PostgreSQL(PgAdmin)直接访问SQL Server数据库?
可以从PostgreSQL向SQL Server执行SELECT并获取结果
核心解决方案是利用PostgreSQL的外部数据包装器(Foreign Data Wrapper, FDW),其中针对SQL Server/TDS协议的tds_fdw是最常用的实现工具,具体操作步骤如下:
1. 安装tds_fdw扩展
在PostgreSQL服务器上安装该扩展,不同操作系统的命令示例:
- Debian/Ubuntu系统:
sudo apt-get install postgresql-<你的PostgreSQL版本号>-tds-fdw - RHEL/CentOS系统:
sudo yum install postgresql-<你的PostgreSQL版本号>-tds-fdw - 源码编译:克隆
tds_fdw项目后,按照官方文档完成编译安装
2. 在PostgreSQL中启用扩展
连接到目标PostgreSQL数据库,执行SQL命令启用扩展:
CREATE EXTENSION tds_fdw;
3. 创建外部服务器对象
定义连接SQL Server的配置信息,替换占位符为你的实际参数:
CREATE SERVER sqlserver_server FOREIGN DATA WRAPPER tds_fdw OPTIONS ( servername '你的SQL Server地址', port '1433', -- 若SQL Server用自定义端口则替换 database '目标SQL Server数据库名', tds_version '7.4' -- 匹配SQL Server版本:2016+用7.4,2012用7.2,2008用7.1 );
4. 创建用户映射
将PostgreSQL用户映射到SQL Server的合法登录账户:
CREATE USER MAPPING FOR postgres -- 替换为你的PostgreSQL操作用户名 SERVER sqlserver_server OPTIONS ( username 'SQL Server登录名', password 'SQL Server登录密码' );
5. 创建外部表
把SQL Server中需要查询的表映射为PostgreSQL的外部表,示例如下:
CREATE FOREIGN TABLE sqlserver_customers ( id INT, name VARCHAR(100), email VARCHAR(200) ) SERVER sqlserver_server OPTIONS ( schema_name 'dbo', -- SQL Server中的表所属schema table_name 'customers' -- SQL Server中的目标表名 );
6. 执行查询操作
现在可以像查询PostgreSQL本地表一样,直接对外部表执行SELECT语句:
SELECT * FROM sqlserver_customers WHERE id > 100;
额外实用技巧
- 若需要批量导入SQL Server某个schema下的所有表,可使用
IMPORT FOREIGN SCHEMA避免手动创建外部表:
IMPORT FOREIGN SCHEMA dbo FROM SERVER sqlserver_server INTO public; -- 指定导入到PostgreSQL的目标schema
- 确保PostgreSQL服务器的防火墙允许访问SQL Server的对应端口(默认1433)
内容的提问来源于stack exchange,提问作者tapiwajemwa
相关产品推荐
相关产品推荐

