sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Postgres 9.1 contra Mysql 5.6 InnoDB?

PostgreSQL es mucho más avanzado en lo que respecta a las funciones de SQL.

Cosas que MySQL aún no tiene (y PostgreSQL tiene):

  • restricciones diferibles

  • comprobar restricciones (MySQL 8.0.16 los agregó, MariaDB 10.2 los tiene)

  • unión externa completa
    MySQL utiliza silenciosamente una unión interna con algunas variaciones de sintaxis:
    https://rextester.com/ADME43793

  • uniones laterales

  • las expresiones regulares no funcionan con UTF-8 (Reparado con MySQL 8.0)

  • las expresiones regulares no admiten el reemplazo o la subcadena (Introducido con MySQL 8.0)

  • funciones de tabla ( select * from my_function() )

  • expresiones de tabla comunes (Introducido con MySQL 8.0)

  • consultas recursivas (Introducido con MySQL 8.0)

  • CTE grabables

  • funciones de ventana (Introducido con MySQL 8.0)

  • índice basado en funciones

  • índice parcial

  • INCLUYE una columna adicional en un índice (por ejemplo, para índices únicos)

  • estadísticas de varias columnas

  • búsqueda de texto completo en tablas transaccionales (MySQL 5.6 es compatible con esto)

  • Funciones GIS en tablas transaccionales

  • Operador EXCEPT o INTERSECT (MariaDB los tiene)

  • no puede usar una tabla temporal dos veces en la misma declaración de selección

  • no puede usar la tabla que se está cambiando (actualizar/eliminar/insertar) en una subselección

  • no puedes crear una vista que use una tabla derivada (Posible desde MySQL 8.0)

      create view x as select * from (select * from y);
    
  • consistencia de lectura a nivel de instrucción. Necesario para, por ejemplo:
    update foo set x = y, y = x o
    update foo set a = b, a = a + 100

  • DDL transaccional

  • Activadores DDL

  • restricciones de exclusión

  • almacén de clave/valor

  • Indexación de documentos JSON completos

  • Expresiones de ruta SQL/JSON (desde Postgres 12)

  • tipos de rango

  • dominios

  • arreglos (incluyendo índices en arreglos)

  • roles (grupos) para administrar los privilegios de los usuarios (MariaDB los tiene, introducido con MySQL 8.0)

  • consultas paralelas (desde Postgres 9.6 )

  • creación de índice paralelo (desde Postgres 11)

  • tipos de datos definidos por el usuario (incluidas las restricciones de verificación)

  • vistas materializadas

  • agregados personalizados

  • funciones de ventana personalizadas

  • propio boolean tipo de datos
    (tratar cualquier expresión que se pueda convertir a un número distinto de cero como "verdadero" es no un tipo booleano adecuado)

Cuando se trata de características espaciales/GIS, Postgres con PostGIS también es mucho más capaz. Aquí hay una buena comparación.

No estoy seguro de a qué se llama "facilidad de uso", pero hay varias características modernas de SQL que no me gustaría perderme (CTE, funciones de ventana) que definirían "facilidad de uso" para mí.

Ahora, PostgreSQL no es perfecto y probablemente lo más desagradable puede ser ajustar el temido proceso VACUUM para una base de datos de escritura pesada.