Skip to content
Lucas Caton

6 motivos para usar o PostgreSQL em vez do MySQL

Por que PostgreSQL é minha recomendação de banco de dados?

Lucas Caton

Lucas Caton

@lucascaton
Um elefante e um tubarão se enfrentando
Muitos alunos do meu curso me perguntam porque eu recomendo o PostgreSQL em vez do MySQL.
O PostgreSQL vem se provando cada vez mais uma solução melhor (não sou apenas eu quem está dizendo, boa parte da comunidade de desenvolvedores concorda com isso). Mas eu gostaria de listar aqui alguns dos motivos pelos quais eu particularmente prefiro ele.

1) Transações a nível de tabela

Transações são extremamente úteis para uma série de tarefas, como por exemplo executar queries perigosas (apagando registros por exemplo) diretamente no console do SGBD.
Ao programar um software, uma boa hora de usar transações é ao migrar o schema do seu banco, ou seja, criar, modificar, apagar tabelas, colunas, índices, etc.
O MySQL no entanto não oferece transações a nível de tabela. Por exemplo:
sql
BEGIN;
CREATE TABLE `users` (`name` varchar(255));
ROLLBACK;
Ao rodar as queries acima, seria esperado que a tabela users fosse criada e então apagada, no entanto ela permanece.
Execute o comando SHOW TABLES; para verificar.
Já no PostgreSQL:
sql
BEGIN;
CREATE TABLE "users" ("name" character varying);
ROLLBACK;
Tudo funciona conforme o esperado e a tabela users é completamente removida.
Execute o comando \d para verificar.

2) Funcionalidades

  • Full-text search - O suporte à busca full-text do PostgreSQL não é só melhor que a do MySQL como foi incluída muito tempo antes.
  • UUID - Geração nativa de campos UUID é uma funcionalidade (até o momento) exclusiva do PostgreSQL, a qual pode inclusive ser usada como chave-primária. Mais informações na documentação oficial.

3) Encoding padrão

O tipo de codificação padrão do PostgreSQL é o UTF-8. Simples assim!
Já o padrão do MySQL é latin1, o qual simplesmente não é preparado para funcionar em qualquer canto do mundo (enquanto que o UTF-8 é) e também não aceita emojis. Além disso, você pode ter tabelas com diferentes encodings, o que na minha opinião é um tanto confuso.
Atualização: em abril/2018, a versão 8.0 do MySQL foi liberada e o character set padrão passou a finalmente ser o UTF-8! Obrigado por avisar, Fernando!

4) Tipos de dados (colunas)

A maioria dos tipos de colunas são mais amigáveis e consistentes no PostgreSQL que no MySQL. Exemplo: um dado booleano é guardado como boolean no PostgreSQL e - por falta de algo mais apropriado - guardado como tinyint(1) no MySQL.
O tipo tinyint, a princípio, guarda um valor inteiro de 1 dígito. Para guardar um boleano nesse tipo de campo, usamos 1 ou 0, o que é popularmente conhecido como "gambiarra" :)

Outros exemplos bacanas de tipos do PostgreSQL são:

5) Comunidade e licenças

Depois que o MySQL foi comprado pela Oracle, foi criado um fork do projeto, chamado MariaDB, o qual no começo se comprometia a ser compatível com o MySQL, porém totalmente livre em termos de licença. Infelizmente ele já não é 100% compatível com o MySQL, o que talvez seja um problema para algumas empresas ou desenvolvedores (ou não).
Já o PostgreSQL sempre foi open-source e apesar de ter uma licença própria, ela é muito parecida com as licenças BSD e MIT.

6) Preços

Muita gente não sabe, mas a versão completa do MySQL não é gratuita.
O PostgreSQL por sua vez oferece todas as suas funcionalidades pelo mesmo preço: zero!

Conclusão

Do jeito que eu listei as comparações aqui, pode parecer que o MySQL é o pior banco de dados do mundo, mas de fato ele está longe disso. O fato de ser tão popular e de tantas empresas usarem e apostarem nele provam isso.
Entretanto, pelos motivos citados acima, PostgreSQL é minha escolha pessoal. Deixe nos comentários abaixo se você concorda ou discorda, discussões (saudáveis) são sempre bem-vindas! 😉