Qual é a diferença entre o MySQL e o PostgreSQL?

O MySQL é um sistema de gerenciamento de banco de dados relacional que permite armazenar dados como tabelas com linhas e colunas. É um sistema popular que alimenta muitas aplicações Web, sites dinâmicos e sistemas integrados. O PostgreSQL é um sistema de gerenciamento de banco de dados de objetos/relacional que oferece mais recursos que o MySQL. Ele oferece mais flexibilidade nos tipos de dados, escalabilidade, simultaneidade e integridade dos dados.

Leia sobre o MySQL »

Leia sobre o PostgreSQL »

Quais são as semelhanças entre o PostgreSQL e o MySQL?

Tanto o PostgreSQL quanto o MySQL são sistemas de gerenciamento de bancos de dados relacionais. Eles armazenam dados em tabelas que estão inter-relacionadas entre si por meio de valores de coluna comuns. Veja abaixo um exemplo:

  1. Uma empresa armazena dados de clientes em uma tabela chamada Customers com os nomes de colunas customer_id, customer_name e customer_address.
  2. A empresa também armazena dados do produto em uma tabela chamada Products com os nomes de coluna product_id, product_name e product_price. 
  3. Para registrar os itens comprados por cada cliente, a empresa tem uma tabela chamada Customer_Orders com as colunas customer_id e product_id.

Veja a seguir outras semelhanças entre o PostgreSQL e o MySQL:

  • Ambos usam o SQL como uma interface para ler e editar dados
  • Ambos são de código aberto e têm forte apoio da comunidade de desenvolvedores
  • Ambos têm recursos integrados de backup de dados, replicação e controle de acesso

Leia sobre SQL »

Principais diferenças: PostgreSQL vs MySQL

Embora o PostgreSQL e o MySQL sejam conceitualmente semelhantes, há muitas diferenças a serem consideradas antes de os implementar.

Conformidade com ACID

Atomicidade, consistência, isolamento e durabilidade (ACID) são propriedades do banco de dados que garantem que ele permaneçará em um estado válido mesmo após erros inesperados. Por exemplo, se você atualizar um grande número de linhas, mas o sistema falhar no meio do caminho, nenhuma linha deverá ser modificada.

O MySQL oferece conformidade com ACID somente quando você o usa com mecanismos de armazenamento ou módulos de software InnoDB e NDB Cluster. O PostgreSQL é totalmente compatível com ACID em todas as configurações.

Controle de simultaneidade

O controle de simultaneidade multiversão (MVCC) é um recurso avançado de banco de dados que cria cópias duplicadas de registros para ler e atualizar com segurança os mesmos dados em paralelo. Quando você usa o MVCC, vários usuários podem ler e modificar os mesmos dados simultaneamente sem comprometer a integridade desses dados.

Bancos de dados MySQL não oferecem MVCC, mas o PostgreSQL oferece suporte a esse recurso.

Índices

Bancos de dados usam índices para recuperar dados com mais rapidez. Você pode indexar dados acessados com frequência configurando o sistema de gerenciamento de banco de dados para classificá-los e armazená-los de maneira diferente dos outros dados.

O MySQL oferece suporte à indexação B-tree e R-tree, que armazenam dados indexados hierarquicamente. Tipos de índices PostgreSQL incluem árvores, índices de expressão, índices parciais e índices de hash. Há mais opções para ajustar seus requisitos de performance de banco de dados à medida que você se expande.

Tipos de dados

O MySQL é um banco de dados puramente relacional. O PostgreSQL, por outro lado, é um banco de dados de objeto/relacional. Isso significa que, no PostgreSQL, você pode armazenar dados como objetos com propriedades. Objetos são um tipo de dados comum em muitas linguagens de programação, como Java e .NET. Eles sustentam paradigmas como relacionamentos entre pais/filhos e herança.

Trabalhar com o PostgreSQL é mais intuitivo para desenvolvedores de banco de dados. O PostgreSQL também oferece suporte a outros tipos de dados adicionais, como matrizes e XML.

Exibições

Uma exibição é um subconjunto de dados que o sistema de banco de dados cria ao extrair dados relevantes de várias tabelas.

Embora o MySQL ofereça suporte a exibições, o PostgreSQL oferece opções de exibições avançadas. Por exemplo, você pode pré-calcular alguns valores com antecedência (como o valor total de todos os pedidos em um determinado período) para criar visões materializadas. Visões materializadas melhoram a performance do banco de dados para consultas complicadas.

Procedimentos armazenados

Procedimentos armazenados são consultas SQL ou instruções de código que você pode escrever e salvar com antecedência. É possível reutilizar o mesmo código repetidamente, o que torna as tarefas de gerenciamento de banco de dados mais eficientes.

Embora o MySQL e o PostgreSQL ofereçam suporte a procedimentos armazenados, o PostgreSQL permite que você chame procedimentos armazenados escritos em linguagens diferentes do SQL.

Gatilhos

Um gatilho é um procedimento armazenado que é executado automaticamente quando um evento relacionado ocorre no sistema de gerenciamento de banco de dados.

Em um banco de dados MySQL, você apenas pode usar gatilhos AFTER e BEFORE para instruções SQL INSERT, UPDATE e DELETE. Isso significa que o procedimento será executado automaticamente antes ou depois de o usuário modificar os dados. Por outro lado, o PostgreSQL oferece suporte ao gatilho INSTEAD OF, para que você possa executar instruções SQL complexas usando funções.

Como escolher entre PostgreSQL e MySQL

Ambos os bancos de dados relacionais são adequados para a maioria dos casos de uso. No entanto, você pode considerar os seguintes fatores antes de tomar uma decisão final.

Escopo de aplicação

O PostgreSQL é mais adequado para aplicações em nível corporativo com operações de gravação frequentes e consultas complexas.

No entanto, você poderá iniciar um projeto MySQL se quiser criar protótipos, criar aplicações internas com menos usuários ou criar um mecanismo de armazenamento de informações com mais leituras e atualizações de dados pouco frequentes.

Experiência de desenvolvimento de banco de dados

O MySQL é mais adequado para iniciantes e tem uma curva de aprendizado mais curta. É preciso menos tempo para criar um novo projeto de banco de dados do zero. É simples configurar o MySQL como um produto independente ou combiná-lo com outras tecnologias de desenvolvimento Web, como a pilha LAMP.

O PostgreSQL, por outro lado, pode ser muito mais desafiador para iniciantes. Normalmente, ele exige uma configuração complexa da infraestrutura e uma experiência com solução de problemas.

Leia sobre pilhas LAMP »

Requisitos de performance

Se sua aplicação exige atualizações de dados frequentes, o PostgreSQL é a melhor escolha. No entanto, se você precisa de leituras frequentes de dados, o MySQL é a preferência.

Performance de gravação

O MySQL usa bloqueios de gravação para obter uma simultaneidade real. Por exemplo, se um usuário estiver editando a tabela, outro usuário talvez precise esperar até que a operação termine antes de alterar a mesma tabela.

No entanto, o PostgreSQL tem suporte integrado para controle de simultaneidade multiversão (MVCC) sem bloqueios de leitura e gravação. Dessa forma, os bancos de dados PostgreSQL têm melhor performance no caso de operações de gravação frequentes e simultâneas.

Performance de leitura

O PostgreSQL cria um novo processo de sistema com alocação significativa de memória (cerca de 10 MB) para cada usuário conectado ao banco de dados. Ele exige recursos que consomem muita memória para se expandir para vários usuários.

Por outro lado, o MySQL usa um único processo para vários usuários. Como resultado, o banco de dados MySQL supera o PostgreSQL para aplicações que leem e exibem dados principalmente para os usuários.

Resumo das diferenças entre o PostgreSQL e o MySQL

Categoria

MySQL

PostgreSQL

Tecnologia de banco de dados

O MySQL é um sistema de gerenciamento de banco de dados puramente relacional.

O PostgreSQL é um sistema de gerenciamento de banco de dados de objetos/relacional.

Recursos

O MySQL tem suporte limitado a recursos de banco de dados, como exibições, gatilhos e procedimentos.

O PostgreSQL oferece suporte aos recursos de banco de dados mais avançados, como visões materializadas, gatilhos INSTEAD OF e procedimentos armazenados em várias linguagens.

Tipos de dados

O MySQL oferece suporte a tipos de dados numéricos, de caracteres, de data e hora, espaciais e JSON.

O PostgreSQL oferece suporte a todos os tipos de dados do MySQL, juntamente com endereços de rede geométricos, enumerados, matrizes, intervalos, XML, hstore e compostos.

Conformidade com ACID

O MySQL é compatível com ACID somente com os mecanismos de armazenamento InnoDB e NDB Cluster.

O PostgreSQL é sempre compatível com ACID. 

Índices

O MySQL tem suporte para índices B-tree e R-tree.

O PostgreSQL oferece suporte para vários tipos de índices, como índices de expressão, índices parciais e índices de hash, juntamente com árvores.

Performance

O MySQL tem performance melhorada para operações de leitura de alta frequência.

O PostgreSQL tem performance melhorada para operações de gravação de alta frequência.

Suporte para iniciantes

É mais fácil começar a usar o MySQL. Ele tem um conjunto de ferramentas mais amplo para usuários não técnicos.

É mais complexo começar a usar o PostgreSQL. Ele tem um conjunto de ferramentas limitado para usuários não técnicos. 

Como a AWS pode oferecer suporte aos seus requisitos de PostgreSQL e MySQL?

A Amazon Webs Services (AWS) oferece vários serviços para seus requisitos de PostgreSQL e MySQL.

Amazon RDS

O Amazon Relational Database Service (Amazon RDS) é uma coleção de serviços gerenciados que simplifica a configuração, a operação e a escalabilidade de bancos de dados relacionais na nuvem. Com o Amazon Relational Database Service (Amazon RDS) para MySQL, você pode implantar servidores MySQL escaláveis em poucos minutos com capacidade de hardware econômica e redimensionável.

De maneira semelhante, o Amazon Relational Database Service (Amazon RDS) para PostgreSQL facilita a configuração, a operação e o dimensionamento das implantações do PostgreSQL na nuvem. Ele também gerencia tarefas administrativas complexas e demoradas, como upgrades de softwares PostgreSQL, gerenciamento de armazenamento e backups para recuperação de desastres.

Aqui estão outras maneiras com as quais você pode se beneficiar do uso do Amazon RDS:

  • Fazer implantações escaláveis do MySQL e PostgreSQL com capacidade de hardware econômica e redimensionável em poucos minutos
  • Reutilizar código, aplicações e ferramentas relacionados aos seus bancos de dados existentes
  • Visualizar métricas operacionais essenciais, como a utilização da capacidade de computação, memória e armazenamento

Amazon Aurora

O Amazon Aurora é um Relational Database Management System (RDBMS – Sistema de gerenciamento de banco de dados relacional) criado para a nuvem com total compatibilidade com MySQL e PostgreSQL. O Aurora combina a velocidade e a disponibilidade de bancos de dados comerciais avançados com a simplicidade e a economia de bancos de dados de código aberto.

O Aurora é totalmente compatível com MySQL e PostgreSQL e, portanto, aplicações e ferramentas existentes podem ser executadas sem modificações. Você pode migrar para o Amazon Aurora para obter o triplo da throughput da sua configuração atual.

Amazon EC2

O Amazon Elastic Compute Cloud (Amazon EC2) oferece a plataforma de computação mais ampla e profunda. Ele tem mais de 500 instâncias, e você pode escolher o processador, o armazenamento, a rede, o sistema operacional e o modelo de compra mais recentes para atender melhor às necessidades da sua workload.

Você pode usar o Amazon EC2 para executar seus bancos de dados MySQL e PostgreSQL na nuvem. Com essa abordagem, você deve gerenciar tarefas de administração do banco de dados, como provisionamento de infraestrutura, configuração do banco de dados, ajuste, aplicação de patches, backups e escalabilidade.

Comece a usar o PostgreSQL e o MySQL na AWS criando uma conta gratuita hoje mesmo.

Próximas etapas com a AWS

Comece a compilar com o MySQL
Comece a compilar com o PostgreSQL