Como acessar o PostgreSQL com Java, Kotlin, Groovy, Scala pelo JDBC - PGJDBC?

O Driver de conexão mais conhecido e usado para PostgreSQL em Java é o PGJDBC. Ele é tão famoso as pessoas pensam ser o único. Nesse post explicarei alguns comportamentos dessa biblioteca e dicas para você usar ele da forma correta.

O que acontece com uma queda de conexão?

O que acontece quando o software (e o driver PGJDBC) perde conexão com o PostgeSQL?

A conexão é encerrada e todas as tentativas de usá-la a partir daí retornarão uma exception.

Como lidar com isso? O PGJDBC implementa algum tipo de reconexão?

Infelizmente não, a recomendação é sempre usar o JDBC juntamente com um connection pool (tipo HikariCP).

Conheça mais sobre o HikariCP neste outro post aqui do blog.

Parâmetros de configuração da conexão

Ao criar uma conexão você pode definir alguns parâmetros para ela. Elas alteram como as consultas são executadas e como o driver e o banco otimizam as operações.

autocommit

Por padrão seu valor é true.

Se true, ao executar uma query o Driver automaticamente roda o comando COMMIT no final. Se você precisa usar transações, desabilite esse comando.

Se false, tudo que você mudar no banco e quiser salvar por definitivo é preciso enviar um COMMIT. Ao iniciar uma query, o Driver executa automaticamente o comando BEGIN.

Existem outros drivers de PostgreSQL para o Java?

Sim! O único concorrente viável até agora é PGJDBC-NG.

Ele implementa o sistema de envio de mensagens assíncronas do PostgreSQL: LISTEN - NOTIFY.

Entretanto o PGJDBC é muito mais antigo, testado e estável. Se você não precisa das funções avançadas que o PGJDBC-NG fornece, fique com o PGJDBC.

Referências

Documentação Oficial do PGJDBC
https://jdbc.postgresql.org/documentation/head/connect.html

Documentação Git Oficial do PGJDBC
https://github.com/pgjdbc/www/blob/master/documentation/94/connect.md

Sobre prepared statements
https://stackoverflow.com/questions/32297503/whats-the-life-span-of-a-postgresql-server-side-prepared-statement

Sobre prepared statements
https://use-the-index-luke.com/sql/explain-plan/postgres/concrete-planning

Sobre reconexão do PGJDBC
https://www.postgresql.org/message-id/[email protected]

You should also read: