

# Trabalhar com bancos de dados do SQL Server usando a extensão tds\$1fdw
<a name="postgresql-tds-fdw"></a>

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\$1fdw](https://github.com/tds-fdw/tds_fdw) no GitHub. 

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\$1fdw
<a name="postgresql-tds-fdw-setting-up"></a>

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\$1fdw a fim de se conectar a um banco de dados do SQL Server**

1. 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 –-password
   ```

1. Instale 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`. 

1. 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\$1set 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
   ```

1. 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 TO user1;
   ```

1. 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
   ```

1. 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
   ```

1. Consulte a tabela externa:

   ```
   test=> SELECT * FROM mytab;
    a
   ---
    1
   (1 row)
   ```

### Usar criptografia em trânsito para a conexão
<a name="postgresql-tds-fdw-ssl-tls-encryption"></a>

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](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.Concepts.General.SSL.Using.html#SQLServer.Concepts.General.SSL.Forcing). 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](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.Concepts.General.SSL.Using.html). 