PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Postgres 9.1 vs MySQL 5.6 InnoDB?

PostgreSQL è molto più avanzato quando si tratta di funzionalità SQL.

Cose che MySQL ancora non ha (e PostgreSQL ha):

  • vincoli differibili

  • controlla i vincoli (MySQL 8.0.16 li ha aggiunti, MariaDB 10.2 li ha)

  • full outer join
    MySQL utilizza silenziosamente un inner join con alcune variazioni di sintassi:
    https://rextester.com/ADME43793

  • giunti laterali

  • Le espressioni regolari non funzionano con UTF-8 (Risolto con MySQL 8.0)

  • Le espressioni regolari non supportano la sostituzione o la sottostringa (Introdotto con MySQL 8.0)

  • funzioni della tabella ( select * from my_function() )

  • Espressioni di tabelle comuni (Introdotto con MySQL 8.0)

  • query ricorsive (Introdotto con MySQL 8.0)

  • CTE scrivibili

  • funzioni della finestra (Introdotto con MySQL 8.0)

  • indice basato sulla funzione

  • indice parziale

  • INCLUDE colonna aggiuntiva in un indice (ad es. per indici univoci)

  • statistiche su più colonne

  • Ricerca full-text su tabelle transazionali (MySQL 5.6 lo supporta)

  • Funzionalità GIS su tabelle transazionali

  • Operatore EXCEPT o INTERSECT (li ha MariaDB)

  • non puoi utilizzare una tabella temporanea due volte nella stessa istruzione select

  • non è possibile utilizzare la tabella modificata (aggiorna/cancella/inserisci) in una sottoselezione

  • Non puoi creare una vista che utilizza una tabella derivata (Possibile da MySQL 8.0)

      create view x as select * from (select * from y);
    
  • coerenza di lettura a livello di istruzioni. Necessario per es.:
    update foo set x = y, y = x oppure
    update foo set a = b, a = a + 100

  • DDL transazionale

  • Trigger DDL

  • vincoli di esclusione

  • archivio chiave/valore

  • Indicizzazione di documenti JSON completi

  • Espressioni di percorso SQL/JSON (da Postgres 12)

  • tipi di intervallo

  • domini

  • array (compresi gli indici sugli array)

  • ruoli (gruppi) per gestire i privilegi utente (MariaDB li ha, introdotto con MySQL 8.0)

  • query parallele (da Postgres 9.6 )

  • creazione di indici paralleli (da Postgres 11)

  • tipi di dati definiti dall'utente (inclusi i vincoli di controllo)

  • viste materializzate

  • aggregati personalizzati

  • funzioni finestra personalizzate

  • corretto boolean tipo di dati
    (considerare "true" qualsiasi espressione che può essere convertita in un numero diverso da zero non un tipo booleano corretto)

Quando si tratta di funzionalità spaziali/GIS, Postgres con PostGIS è anche molto più capace. Ecco un bel confronto.

Non sono sicuro di cosa chiami "facilità d'uso", ma ci sono diverse moderne funzionalità SQL che non vorrei perdere (CTE, funzioni di windowing) che definirebbero "facilità d'uso" per me.

Ora, PostgreSQL non è perfetto e probabilmente la cosa più odiosa può essere mettere a punto il temuto processo VACUUM per un database di scrittura pesante.