通过使用 tds_fdw 扩展来使用 SQL Server 数据库
您可以使用 PostgreSQL tds_fdw
扩展来访问支持表格数据流 (TDS) 协议的数据库,例如 Sybase 和 Microsoft SQL Server 数据库。此外部数据包装器可让您从 RDS for PostgreSQL 数据库实例 连接到使用 TDS 协议的数据库,包括 Amazon RDS for Microsoft SQL Server。有关更多信息,请参阅 GitHub 上的 tds-fdw/tds_fdw
Amazon RDS for PostgreSQL 版本 14.2、13.6 及更高版本支持该 tds_fdw
扩展。
将 Aurora PostgreSQL 数据库设置为使用 tds_fdw 扩展
在以下过程中,您可以找到设置 tds_fdw
并将其与 RDS for PostgreSQL 数据库实例结合使用的示例。在可以使用 tds_fdw
连接到 SQL Server 数据库之前,您需要获取实例的以下详细信息:
主机名或终端节点。对于 RDS for SQL Server 数据库实例,您可以使用控制台查找终端节点。选择 Connectivity & security(连接和安全)选项卡,然后查看 Endpoint and port(终端节点和端口)部分。
端口号。Microsoft SQL Server 的默认端口是 1433。
数据库的名称。数据库标识符。
您还需要为 SQL Server 端口 1433 提供对安全组或访问控制列表 (ACL) 的访问权限。RDS for PostgreSQL 数据库实例和 RDS for SQL Server 数据库实例都需要访问端口 1433。如果访问权限配置不正确,当您尝试查询 Microsoft SQL Server 时,会看到以下错误消息:
ERROR: DB-Library error: DB #: 20009, DB Msg: Unable to connect:
Adaptive Server is unavailable or does not exist (mssql2019
.aws-region
.rds.amazonaws.com), OS #: 0, OS Msg: Success, Level: 9
使用 tds_fdw 连接到 SQL Server 数据库
使用具有
rds_superuser
角色的账户连接到您的 PostgreSQL 数据库实例:psql --host=
your-DB-instance
.aws-region
.rds.amazonaws.com --port=5432 --username=test –-password安装
tds_fdw
扩展:test=>
CREATE EXTENSION tds_fdw;
CREATE EXTENSION
在 RDS for PostgreSQL 数据库实例上安装扩展后,应设置外部服务器。
创建外部服务器
使用具有 rds_superuser
权限的账户在 RDS for PostgreSQL 数据库实例上执行这些任务。
在 RDS for PostgreSQL 数据库实例中创建外部服务器:
test=>
CREATE SERVER
sqlserverdb
FOREIGN DATA WRAPPER tds_fdw OPTIONS (servername 'mssql2019
.aws-region
.rds.amazonaws.com', port '1433', database 'tds_fdw_testing
');CREATE SERVER
要访问 SQLServer 端的非 ASCII 数据,请在 RDS for PostgreSQL 数据库实例中使用 character_set 选项创建服务器链接:
test=>
CREATE SERVER
sqlserverdb
FOREIGN DATA WRAPPER tds_fdw OPTIONS (servername 'mssql2019
.aws-region
.rds.amazonaws.com', port '1433', database 'tds_fdw_testing
', character_set'UTF-8'
);CREATE SERVER
向没有
rds_superuser
角色权限的用户授予权限,例如user1
:test=>
GRANT USAGE ON FOREIGN SERVER
sqlserverdb
TOuser1
;以 user1 身份进行连接,然后创建到 SQL Server 用户的映射:
test=>
CREATE USER MAPPING FOR user1 SERVER
sqlserverdb
OPTIONS (username 'sqlserveruser
', password 'password
');CREATE USER MAPPING
创建链接到 SQL Server 表的外部表:
test=>
CREATE FOREIGN TABLE mytab (a int) SERVER
sqlserverdb
OPTIONS (table 'MYTABLE
');CREATE FOREIGN TABLE
查询外部表:
test=>
SELECT * FROM mytab;
a --- 1 (1 row)
使用传输中的加密进行连接
RDS for PostgreSQL 到 SQL Server 的连接使用传输中加密 (TLS/SSL),具体取决于 SQL Server 数据库配置。如果 SQL Server 未配置为加密,则向 SQL Server 数据库发出请求的 RDS for PostgreSQL 客户端将回退到未加密状态。
您可以通过设置 rds.force_ssl
参数对与 RDS for SQL Server 数据库实例的连接进行加密。要了解操作方法,请参阅强制与数据库实例的连接使用 SSL。有关 RDS for SQL Server 的 SSL/TLS 配置的更多信息,请参阅将 SSL 与 Microsoft SQL Server 数据库实例结合使用。