PostgreSQL vs. MySQL
PostgreSQL y MySQL son dos de los sistemas de gestión de bases de datos de código abierto más utilizados. Mostramos sus similitudes y diferencias y explicamos cuál de las dos herramientas es la más adecuada para cada caso de uso.
Un vistazo a PostgreSQL vs. MySQL
PostgreSQL y MySQL son sistemas de gestión de bases de datos (DBMS, por sus siglas en inglés). Para la mayoría de las aplicaciones prácticas, los dos sistemas tienen más similitudes que diferencias. Sin embargo, la comparación PostgreSQL vs. MySQL muestra algunas sutiles diferencias que se traducen en ventajas y desventajas específicas.
Puedes encontrar más información sobre ambos sistemas en nuestros artículos específicos:
En primer lugar, PostgreSQL y MySQL se basan en el lenguaje de programación SQL como interfaz central para interactuar con bases de datos y los datos que estas contienen. La más conocida es probablemente la sentencia SELECT, que se utiliza para ejecutar consultas, la cual permite encontrar los datos y acceder a la información que se necesita. Además, hay varios comandos SQL que sirven para controlar el DBMS.
El rango de funciones de SQL se define en varias normas. Las implementaciones más habituales cubren más o menos bien los estándares. Si comparamos PostgreSQL vs. MySQL, PostgreSQL es más potente y soporta una gama más amplia de funciones que MySQL.
¿El tema de SQL es nuevo para ti? En ese caso, lo mejor es que empieces con nuestra introducción a SQL con ejemplos.
Una diferencia importante entre PostgreSQL y MySQL es su arquitectura básica. En primer lugar, ambos son sistemas de gestión de bases de datos relacionales (RDBMS). Sin embargo, PostgreSQL puede hacer mucho más, ya que se trata de un DBMS relacional de objetos (ORDBMS). A continuación, te explicamos cuál es exactamente la diferencia.
Ambos DBMS parten de un motor de almacenamiento. Se trata de una interfaz para almacenar datos en medios físicos. Se utilizan índices que permiten referenciar entradas individuales de la base de datos para obtener un acceso de alto rendimiento. Existen varios motores de almacenamiento y métodos de indexación; cada uno con sus propias ventajas e inconvenientes.
PostgreSQL y MySQL son sistemas de gestión de bases de datos de código abierto y, por tanto, contrastan con los productos privativos de grandes proveedores como Microsoft o IBM. Además, hay muchos otros DBMS de código abierto. A continuación, te presentamos una comparativa de las bases de datos de código abierto más importantes.
MySQL: el clásico RDBMS de código abierto
MySQL fue desarrollado a mediados de los años 90 por la empresa MySQL AB en Suecia, que fue adquirida por Sun Microsystems en 2008 y por Oracle en 2010. Debido a la desconfianza que siente la comunidad de código abierto hacia Oracle, el software de la base de datos se forkeó como “MariaDB”. De este modo, se garantizaba que el proyecto se mantuviera bajo una licencia de código abierto.
En los años de auge de la todavía nueva World Wide Web, MySQL ganó fama como componente del omnipresente LAMP Stack. De esta forma, el software de la base de datos se proporciona junto con Linux, Apache y PHP como parte de la mayoría de los paquetes de hosting online. Durante su expansión, MySQL se convirtió en el estándar de los proyectos web con base de datos relacional subyacente.
PostgreSQL: la potente alternativa relacional de objetos
PostgreSQL se concibió inicialmente con el nombre de “Postgres”, como sucesor del DBMS Ingres. Se desarrolló a mediados de los años 80 en la Universidad de California, Berkeley y su código se publicó bajo la licencia “Berkeley Software Distribution” (BSD). A mediados de los años 90, se cambió a SQL como interfaz uniforme, de la mano de un cambio de nombre a “PostgreSQL”. Ambos nombres se siguen utilizando hoy en día.
Según el propio IBM, PostgreSQL es:
“One of the most compliant, stable and mature relational databases available today and can easily handle complex queries.” – Fuente: https://www.ibm.com/cloud/blog/postgresql-vs-mysql-whats-the-difference
Traducción: “Una de las bases de datos relacionales más estables y consolidadas que existen en la actualidad y que puede gestionar fácilmente consultas complejas” (traducido por IONOS)
La comparación: PostgreSQL vs. MySQL
En primer lugar, tanto PostgreSQL como MySQL permiten trabajar con bases de datos relacionales. Ambos sistemas entienden los comandos SQL que permiten crear, modificar y llenar tablas, así como realizar consultas. Además, si se compara PostgreSQL con MySQL, observamos diferencias fundamentales en términos de funcionalidad. Estas diferencias se deben a su diferente arquitectura.
Mientras que MySQL es un sistema de gestión de bases de datos puramente relacional (RDBMS), PostgreSQL es un DBMS relacional de objetos (ORDBMS). Así pues, PostgreSQL soporta una serie de conceptos conocidos de la programación orientada a objetos. Entre ellos se encuentran los tipos de datos definidos por el usuario, los tipos de datos compuestos y la herencia. PostgreSQL es más potente que MySQL, pero también más complejo.
Propiedad del DBMS | PostgreSQL / ORDBMS | MySQL / RDBMS |
Múltiples datos por campo | Admitidos como arrays | Requiere una tabla separada y join |
relación m:n | Directamente moldeable | Requiere tablas adicionales y join |
Herencia | Directamente moldeable | Requiere una solución/vista compleja, múltiples tablas, etc. |
Datos jerárquicos | Mediante JSON, HStore y XML | Solamente JSON |
Valores booleanos | Tipo de datos propios | Implementación como TINYINT(1) |
Tipos de datos
Los tipos de datos son la base de un diseño de base de datos sólido y de su correcta aplicación. Cuando se diseñan tablas, se especifica para cada columna qué tipo de datos deben contener. Existen los siguientes tipos de datos:
Tipo de datos | PostgreSQL | MySQL |
Valores booleanos | PostgreSQL reconoce un tipo de datos booleano propio. | MySQL toma un desvío: en vez de implementar los valores booleanos como tipo de datos propio, los booleanos se almacenan como números del tipo TINYINT(1). |
Ranges | PostgreSQL soporta un gran número de tipos de range, lo que facilita trabajar con valores ordinales. | MySQL no soporta ranges de primeras. Si se necesitan, hay que tirar de alternativas caseras. |
Geodatos | PostgreSQL incluye la extensión de código abierto PostGIS, que vale como una de las implementaciones GIS más maduras. | Desde la versión 8, MySQL soporta geodatos y sus consultas, aunque el alcance de sus funciones es más reducido que el de PostgreSQL. |
Arrays | PostgreSQL soporta arrays como un ORDBMS. Con las matrices de PostgreSQL, se pueden almacenar múltiples valores en un campo. | MySQL no soporta este tipo de datos. |
Datos jerárquicos / JSON | PostgreSQL soporta JSON como tipo de datos. Así, se acomoda una estructura de datos compleja e intercalada jerárquicamente en un solo campo. | MySQL también soporta JSON como tipo de datos pero no es tan potente como PostgreSQL. |
Rendimiento
El rendimiento de las bases de datos es una cuestión muy compleja. Generalmente, los distintos DBMS ofrecen ciertas ventajas y desventajas en función de su ámbito de uso. Como norma, se considera que MySQL tiene un rendimiento muy alto, especialmente cuando la base de datos es “read-heavy”, es decir, principalmente de lectura. Este suele ser el caso de los Content Management Systems como WordPress, que leen el contenido de la base de datos y lo entregan a los visitantes.
A diferencia de MySQL, PostgreSQL suele ofrecer un mayor rendimiento en las operaciones “write-heavy”. Además, el ORDBMS se considera más adecuado para soluciones de almacenamiento de datos y otros sistemas de “Online Analytical Processing” (OLAP). PostgreSQL soporta múltiples conexiones con sus propios procesos, pero esto conlleva mayores requisitos de memoria.
Seguridad y disponibilidad
Lo ideal es que los DBMS relacionales garanticen la coherencia y la disponibilidad de los datos almacenados. Esto también se conoce como propiedades “ACID”. PostgreSQL soporta las propiedades ACID al completo. En el caso de MySQL esto también es cierto en mayor o menor medida, dependiendo del motor de almacenamiento utilizado.
La situación es similar en lo que respecta al “Multiversion Concurrency Control” (MVCC), que garantiza la coherencia de los datos en caso de accesos simultáneos a la base de datos. En el caso de PostgreSQL MVCC ya viene incluido, mientras que en el caso de MySQL depende del motor de almacenamiento. En términos de seguridad, MySQL ofrece buenas condiciones con la encriptación TLS. PostgreSQL todavía utiliza el estándar SSL, que es más antiguo.
Administración
Un aspecto importante del uso de DBMS es el soporte de diferentes interfaces de administración. Tanto PostgreSQL como MySQL tienen una interfaz de línea de comandos (Command Line Interface, CLI) con psql y mysql respectivamente. Las herramientas de la CLI pueden utilizarse para conectarse a la base de datos y ejecutar el código SQL a partir de la entrada directa o de un archivo script.
Además de las interfaces de línea de comandos, PostgreSQL y MySQL tienen interfaces gráficas de usuario (Graphical User Interface, GUI) nativas y basadas en la web. Otro punto importante son las herramientas específicas de importación y exportación. Permiten crear y restaurar copias de seguridad de las bases de datos. PostgreSQL incorpora las herramientas pg_dump y pg_restore, que como copias de seguridad son más potentes que una copia de seguridad de MySQL hecha con la herramienta MySQL Dump.
Admin Tool | PostgreSQL | MySQL |
CLI Client | psql | mysql |
Web GUI | phpPgAdmin | phpMyAdmin |
Native GUI | pgAdmin | MySQL Workbench |
¿En qué casos se utiliza PostgreSQL y MySQL?
Como hemos visto, al comparar PostgreSQL vs. MySQL existen profundas diferencias. Entonces, ¿cuál de los dos sistemas de gestión de bases de datos debes utilizar en tu propio proyecto? Afortunadamente, la respuesta es sencilla: El uso de PostgreSQL tiene sentido si la base de datos tiene requisitos especiales. Si no es el caso, MySQL suele ser suficiente.
En otras palabras, se puede confiar en PostgreSQL para implementar el sitio web de un banco o una institución de vital importancia, ya que en este caso, que cumpla íntegramente con ACID merece la pena y los elevados requisitos de estabilidad y consistencia de los datos justifican la mayor complejidad del ORDBMS. Además, dispone de recursos suficientes para un entorno PostgreSQL de alto rendimiento.
Otro ámbito de uso de PostgreSQL es cuando la arquitectura del proyecto requiere la gestión de modelos de datos sofisticados. Si deseas asignar jerarquías de objetos complejas o si se requiere la herencia como componente central del modelo de datos, conviene utilizar el potente ORDBMS. En concreto, es posible ahorrarse tener que usar el mapeo objeto-relacional (Object-relational Mapping, ORM).
Para proyectos web de tamaño pequeño o mediano, es mejor utilizar MySQL. Este RDBMS consume menos recursos del servidor. También es más fácil encontrar un administrador de MySQL experimentado y económicamente asequible. El gran rendimiento en la lectura de datos de la base de datos se adapta bien a los sitios web y a las tiendas online con no demasiadas exigencias.
Por último, pero no por ello menos importante, notemos que PostgreSQL y MySQL pueden sin duda utilizarse en tándem. Esto es especialmente interesante para las soluciones de almacenamiento de datos. Normalmente, en una configuración de este tipo se utilizan una o más instancias de MySQL orientadas al exterior. Recogen los datos y los transmiten a una instalación central de PostgreSQL situada detrás de ellos, sobre la que se ejecutan las evaluaciones y los análisis.
Lee también nuestra comparativa MariaDB vs. MySQL.