

# Gerenciamento de sessões com a API de dados do Amazon RDS
<a name="data-api.session-management"></a>

A API de dados do RDS mantém um pool de conexões de banco de dados e as reutiliza entre chamadas para reduzir a sobrecarga de conexão. Antes de reutilizar uma conexão, a API de dados do RDS redefine o estado da sessão. A redefinição varia de acordo com o mecanismo de banco de dados: no PostgreSQL, a API de dados do RDS executa a instrução `DISCARD ALL` para limpar o estado da sessão, como tabelas temporárias, instruções preparadas e parâmetros no nível da sessão; no MySQL, a API de dados do RDS redefine a conexão (o equivalente a `COM_RESET_CONNECTION`).

Essas redefinições abrangem os atributos no nível da sessão gerenciados pelo mecanismo, mas não há garantia de que incluam o estado criado por uma extensão. As extensões podem não se comportar da mesma maneira que outros atributos no nível da sessão quando essas operações de limpeza são executadas, e seu estado pode persistir na conexão de banco de dados após a redefinição. Como a API de dados do RDS reutiliza conexões, o estado deixado por uma extensão não fica limitado à chamada que o criou e ainda pode estar presente quando uma chamada posterior reutiliza a mesma conexão.

`dblink` é um exemplo desse comportamento: `DISCARD ALL` não fecha as conexões abertas pela extensão `dblink`, portanto, uma conexão nomeada `dblink` aberta em uma chamada pode continuar aberta quando a conexão for reutilizada. Outras extensões que mantêm recursos fora do estado da sessão do mecanismo podem se comportar de maneira semelhante.

Se você usar extensões com a API de dados do RDS, não confie na redefinição da sessão para liberar o estado gerenciado pelas extensões. Crie e libere esse estado dentro da mesma transação, usando a própria função de encerramento da extensão. Para `dblink`, feche cada conexão com `dblink_disconnect`.