PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Postgres 9.1 vs Mysql 5.6 InnoDB?


O PostgreSQL é muito mais avançado quando se trata de recursos SQL.

Coisas que o MySQL ainda não tem (e o PostgreSQL tem):

  • restrições adiáveis

  • verificar restrições (MySQL 8.0.16 adicionou, MariaDB 10.2 os tem)

  • junção externa completa
    O MySQL usa silenciosamente uma junção interna com algumas variações de sintaxe:
    https://rextester.com/ADME43793


  • junções laterais

  • expressões regulares não funcionam com UTF-8 (Corrigido com MySQL 8.0)

  • expressões regulares não suportam substituição ou substring (Introduzido com o MySQL 8.0)

  • funções de tabela ( select * from my_function() )

  • expressões de tabela comuns (Introduzido com o MySQL 8.0)

  • consultas recursivas (Introduzido com o MySQL 8.0)

  • CTEs graváveis

  • funções de janela (Introduzido com o MySQL 8.0)

  • índice baseado em função

  • índice parcial

  • INCLUIR coluna adicional em um índice (por exemplo, para índices exclusivos)

  • estatísticas de várias colunas

  • pesquisa de texto completo em tabelas transacionais (O MySQL 5.6 suporta isso)

  • Recursos GIS em tabelas transacionais

  • Operador EXCEPT ou INTERSECT (o MariaDB os tem)

  • você não pode usar uma tabela temporária duas vezes na mesma instrução select

  • você não pode usar a tabela que está sendo alterada (atualizar/excluir/inserir) em uma sub-seleção

  • você não pode criar uma visualização que use uma tabela derivada (Possível desde o MySQL 8.0)
      create view x as select * from (select * from y);
    

  • consistência de leitura de nível de instrução. Necessário para, por exemplo:
    update foo set x = y, y = x ou
    update foo set a = b, a = a + 100

  • DDL transacional

  • Acionadores DDL

  • restrições de exclusão

  • armazenamento de chave/valor

  • Indexando documentos JSON completos

  • Expressões de caminho SQL/JSON (desde o Postgres 12)

  • tipos de intervalo

  • domínios

  • arrays (incluindo índices em arrays)

  • funções (grupos) para gerenciar privilégios de usuário (MariaDB os tem, introduzidos com o MySQL 8.0)

  • consultas paralelas (desde Postgres 9.6 )

  • criação de índice paralelo (desde o Postgres 11)

  • tipos de dados definidos pelo usuário (incluindo restrições de verificação)

  • visualizações materializadas

  • agregados personalizados

  • funções de janela personalizadas

  • boolean apropriado tipo de dados
    (tratar qualquer expressão que possa ser convertida em um número diferente de zero como "true" é não um tipo booleano adequado)

Quando se trata de recursos espaciais/GIS, o Postgres com PostGIS também é muito mais capaz. Aqui está uma bela comparação.

Não tenho certeza do que você chama de "facilidade de uso", mas existem vários recursos SQL modernos que eu não gostaria de perder (CTEs, funções de janelas) que definiriam "facilidade de uso" para mim.

Agora, o PostgreSQL não é perfeito e provavelmente a coisa mais desagradável pode ser, ajustar o temido processo VACUUM para um banco de dados de escrita pesada.