通过使用 tds_fdw 扩展来使用 SQL Server 数据库
您可以使用 PostgreSQL tds_fdw
扩展来访问支持表格数据流 (TDS) 协议的数据库,例如 Sybase 和 Microsoft SQL Server 数据库。此外部数据包装器可让您从 Aurora PostgreSQL 数据库集群连接到使用 TDS 协议的数据库,包括 Amazon RDS for Microsoft SQL Server。有关更多信息,请参阅 GitHub 上的 tds-fdw/tds_fdw
Amazon Aurora PostgreSQL 版本 13.6 及更高版本支持该 tds_fdw
扩展。
将 Aurora PostgreSQL 数据库设置为使用 tds_fdw 扩展
在以下过程中,您可以找到设置 tds_fdw
并将其与 Aurora PostgreSQL 数据库集群结合使用的示例。在可以使用 tds_fdw
连接到 SQL Server 数据库之前,您需要获取实例的以下详细信息:
主机名或终端节点。对于 RDS for SQL Server 数据库实例,您可以使用控制台查找终端节点。选择 Connectivity & security(连接和安全)选项卡,然后查看 Endpoint and port(终端节点和端口)部分。
端口号。Microsoft SQL Server 的默认端口是 1433。
数据库的名称。数据库标识符。
您还需要为 SQL Server 端口 1433 提供对安全组或访问控制列表 (ACL) 的访问权限。Aurora 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
角色的账户连接到您的 Aurora PostgreSQL 数据库集群的主要实例:psql --host=
your-cluster-name-instance-1
.aws-region
.rds.amazonaws.com --port=5432 --username=test –-password安装
tds_fdw
扩展:test=>
CREATE EXTENSION tds_fdw;
CREATE EXTENSION
在 Aurora PostgreSQL 数据库集群上安装扩展后,应设置外部服务器。
创建外部服务器
使用具有 rds_superuser
权限的账户在 Aurora PostgreSQL 数据库集群上执行这些任务。
在 Aurora 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 数据,请在 Aurora 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)
使用传输中的加密进行连接
Aurora 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 数据库实例结合使用。