You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 06:20:52