Trabalhar com bancos de dados do SQL Server usando a extensão tds_fdw
Você pode usar a extensão tds_fdw
do PostgreSQL para acessar bancos de dados compatíveis com o protocolo de fluxo de dados tabular (TDS), como bancos de dados do Sybase e do Microsoft SQL Server. Esse invólucro de dados externos permite que você se conecte pela instância de banco de dados do RDS for PostgreSQL a bancos de dados que usam o protocolo TDS, incluindo o Amazon RDS for Microsoft SQL Server. Para obter mais informações, consulte a documentação do tds-fdw/tds_fdw
A extensão tds_fdw
é compatível com o Amazon RDS for PostgreSQL versões 14.2, 13.6 e posteriores.
Configurar o banco de dados do RDS for PostgreSQL para usar a extensão tds_fdw
Nos procedimentos a seguir, você pode encontrar um exemplo de configuração e uso de tds_fdw
com uma instância de banco de dados do RDS for PostgreSQL. Antes de se conectar a um banco de dados do SQL Server usando tds_fdw
, é necessário obter os seguintes detalhes da instância:
Nome de host ou endpoint. Para uma instância de banco de dados do RDS for SQL Server, você pode encontrar o endpoint usando o console. Escolha a guia “Connectivity & security” (Conectividade e segurança) e procure na seção “Endpoint and port” (Endpoint e porta).
Número da porta. O número da porta padrão para o Microsoft SQL Server é 1433.
O nome do banco de dados. O identificador do banco de dados.
Você também precisa fornecer acesso no grupo de segurança ou na lista de controle de acesso (ACL) para a porta 1433 do SQL Server. Tanto a instância de banco de dados do RDS for PostgreSQL como a instância de banco de dados do RDS for SQL Server precisam de acesso à porta 1433. Se o acesso não estiver configurado corretamente, ao tentar consultar o Microsoft SQL Server, será exibida a seguinte mensagem de erro:
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
Para usar tds_fdw a fim de se conectar a um banco de dados do SQL Server
Conecte-se à instância de banco de dados do PostgreSQL usando uma conta que tenha a função
rds_superuser
:psql --host=
your-DB-instance
.aws-region
.rds.amazonaws.com --port=5432 --username=test –-passwordInstale a extensão
tds_fdw
:test=>
CREATE EXTENSION tds_fdw;
CREATE EXTENSION
Depois que a extensão for instalada na instância de banco de dados do RDS for PostgreSQL, configure o servidor externo.
Para criar o servidor externo
Execute essas tarefas na instância de banco de dados do RDS for PostgreSQL usando uma conta com privilégios rds_superuser
.
Crie um servidor externo na instância de banco de dados do RDS para 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
Para acessar dados não ASCII do lado do SQLServer, crie um link de servidor com a opção character_set na instância de banco de dados do RDS para PostgreSQL:
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
Conceda uso a um usuário que não tenha permissões da função
rds_superuser
; por exemplo,user1
:test=>
GRANT USAGE ON FOREIGN SERVER
sqlserverdb
TOuser1
;Conecte-se como user1 e, em seguida, crie um mapeamento para um usuário do SQL Server:
test=>
CREATE USER MAPPING FOR user1 SERVER
sqlserverdb
OPTIONS (username 'sqlserveruser
', password 'password
');CREATE USER MAPPING
Crie uma tabela externa vinculada a uma tabela do SQL Server:
test=>
CREATE FOREIGN TABLE mytab (a int) SERVER
sqlserverdb
OPTIONS (table 'MYTABLE
');CREATE FOREIGN TABLE
Consulte a tabela externa:
test=>
SELECT * FROM mytab;
a --- 1 (1 row)
Usar criptografia em trânsito para a conexão
A conexão do RDS for PostgreSQL com o SQL Server usa criptografia em trânsito (TLS/SSL), dependendo da configuração do banco de dados do SQL Server. Se o SQL Server não estiver configurado para criptografia, o cliente do RDS for PostgreSQL que faz a solicitação ao banco de dados do SQL Server retornará ao estado de não criptografado.
Você pode aplicar a criptografia para a conexão com instâncias de banco de dados do RDS for SQL Server definindo o parâmetro rds.force_ssl
. Para saber como, consulte Forçar conexões com a instância de banco de dados para usar SSL. Para obter mais informações sobre a configuração de SSL/TLS para o RDS for SQL Server, consulte Usar SSL com uma instância de banco de dados do Microsoft SQL Server.