Ya sea que esté migrando una base de datos o un proyecto de MySQL a PostgreSQL, o eligiendo PostgreSQL para un nuevo proyecto con solo conocimientos de MySQL, hay algunas cosas que debe saber sobre PostgreSQL y las diferencias entre los dos sistemas de bases de datos.
PostgreSQL es un sistema de base de datos de código abierto totalmente publicado bajo su propia licencia, la Licencia de PostgreSQL, que se describe como "una licencia liberal de código abierto, similar a las licencias BSD o MIT". Esto ha permitido que The PostgreSQL Global Development Group (comúnmente conocido como PGDG), que desarrolla y mantiene el proyecto de código abierto, mejore el proyecto con la ayuda de personas de todo el mundo, convirtiéndolo en una de las soluciones de base de datos más estables y ricas en funciones. En la actualidad, PostgreSQL compite con los principales sistemas de bases de datos de código abierto y patentados en cuanto a funciones, rendimiento y popularidad.
PostgreSQL es un sistema de base de datos relacional altamente compatible que es escalable, personalizable y tiene una comunidad próspera de personas que lo mejoran todos los días.
Qué necesita PostgreSQL
En un blog anterior, discutimos la configuración y optimización de PostgreSQL para un nuevo proyecto. Es una buena introducción a la configuración y el comportamiento de PostgreSQL y se puede encontrar aquí:https://severalnines.com/blog/setting-optimal-environment-postgresql.
Si migra una aplicación de MySQL a PostgreSQL, el mejor lugar para comenzar sería alojarla en un hardware o plataforma de alojamiento similar a la base de datos MySQL de origen.
En las instalaciones
Si se aloja la base de datos en las instalaciones, los hosts bare metal (en lugar de las máquinas virtuales) suelen ser la mejor opción para alojar PostgreSQL. Las máquinas virtuales agregan algunas funciones útiles a veces, pero tienen el costo de perder potencia y rendimiento del host en general, mientras que el hardware permite que el software PostgreSQL tenga acceso completo al rendimiento con menos capas entre él y el hardware. Los hosts en las instalaciones necesitarían un administrador para mantener las bases de datos, ya sea un empleado de tiempo completo o un contratista, lo que tenga más sentido para las necesidades de la aplicación.
En la nube
El alojamiento en la nube ha avanzado mucho en los últimos años, e innumerables empresas de todo el mundo alojan sus bases de datos en servidores basados en la nube. Dado que los hosts en la nube son altamente configurables, se puede seleccionar el tamaño y la potencia adecuados del host para las necesidades específicas de la base de datos, con un costo que coincida.
Dependiendo de la opción de alojamiento utilizada, los nuevos hosts se pueden aprovisionar rápidamente, la memoria/cpu/disco se pueden ajustar rápidamente e incluso pueden estar disponibles métodos de copia de seguridad adicionales. Al elegir un host en la nube, busque si un host es dedicado o compartido, siendo mejor dedicado para bases de datos de carga extremadamente alta. Otra clave es asegurarse de que las IOPS disponibles para el host de la nube sean lo suficientemente buenas para las necesidades de la actividad de la base de datos. Incluso con un grupo de memoria grande para PostgreSQL, siempre habrá operaciones de disco para escribir datos en el disco o recuperar datos cuando no están en la memoria.
Servicios en la nube
Dado que PostgreSQL está aumentando en popularidad, se encuentra disponible en muchos servicios de alojamiento de bases de datos en la nube como Heroku, Amazon AWS y otros, y rápidamente alcanza la popularidad de MySQL. Estos servicios permiten que un tercero aloje y administre una base de datos PostgreSQL fácilmente, lo que permite que el enfoque permanezca en la aplicación.
Conceptos/comparaciones de términos
Hay algunas comparaciones para cubrir al migrar de MySQL a PostgreSQL, parámetros de configuración comunes, términos o conceptos que funcionan de manera similar pero tienen sus diferencias.
Términos de la base de datos
Varios términos de bases de datos pueden tener diferentes significados dentro de diferentes implementaciones de la tecnología. Entre MySQL y PostgreSQL, hay algunos términos básicos que se entienden de forma ligeramente diferente, por lo que a veces se necesita una traducción.
“Clúster”
En MySQL, un "clúster" generalmente se refiere a varios hosts de bases de datos MySQL conectados entre sí para que los clientes los vean como una sola base de datos o un conjunto de bases de datos.
En PostgreSQL, cuando se hace referencia a un "clúster", es una única instancia en ejecución del software de la base de datos y todos sus subprocesos, que luego contiene una o más bases de datos.
“Base de datos”
En MySQL, las consultas pueden acceder a tablas de diferentes bases de datos al mismo tiempo (siempre que el usuario tenga permiso para acceder a cada base de datos).
SELECT *
FROM customer_database.customer_table t1
JOIN orders_database.order_table t2 ON t1.customer_id = t2.customer_id
WHERE name = ‘Bob’;
Sin embargo, en PostgreSQL esto no puede suceder a menos que se usen contenedores de datos externos (un tema para otro momento). En cambio, una base de datos PostgreSQL tiene la opción de múltiples "esquemas" que funcionan de manera similar a las bases de datos en MySQL. Los esquemas contienen tablas, índices, etc., y se puede acceder a ellos simultáneamente mediante la misma conexión a la base de datos que los alberga.
SELECT *
FROM customer_schema.customer_table t1
JOIN orders_schema.order_table t2 ON t1.customer_id = t2.customer_id
WHERE name = ‘Bob’;
Interfaz con PostgreSQL
En el cliente de línea de comandos de MySQL (mysql), la interfaz con la base de datos utiliza funciones clave como 'DESCRIBIR tabla' o 'MOSTRAR TABLAS'. El cliente de línea de comandos de PostgreSQL (psql) utiliza su propia forma de "comandos de barra invertida". Por ejemplo, en lugar de 'MOSTRAR TABLAS', el comando de PostgreSQL es '\dt', y en lugar de 'MOSTRAR BASES DE DATOS', el comando es '\l'.
Se puede encontrar una lista completa de comandos para 'psql' mediante el comando de barra invertida '\?' dentro de psql.
Soporte de idiomas
Al igual que MySQL, PostgreSQL tiene bibliotecas y complementos para todos los idiomas principales, así como controladores ODBC similares a MySQL y Oracle. Encontrar una biblioteca excelente y estable para cualquier idioma necesario es una tarea fácil.
Procedimientos almacenados
A diferencia de MySQL, PostgreSQL tiene una amplia gama de lenguajes de procedimiento admitidos para elegir. En la instalación base de PostgreSQL, los lenguajes admitidos son PL/pgSQL (lenguaje de procedimiento SQL), PL/Tcl (lenguaje de procedimiento Tcl), PL/Perl (lenguaje de procedimiento Perl) y PL/Python (lenguaje de procedimiento Python). Los desarrolladores de terceros pueden tener más idiomas que el grupo principal de PostgreSQL no admita oficialmente.
Configuración
-
Memoria
MySQL ajusta esto con key_buffer_size cuando usa MyISAM y con innodb_buffer_pool_size cuando usa InnoDB.
PostgreSQL usa shared_buffers para el bloque de memoria principal proporcionado a la base de datos para el almacenamiento en caché de datos y, por lo general, se mantiene alrededor de 1/4 de la memoria del sistema, a menos que ciertos escenarios requieran que eso cambie. Las consultas que usan memoria para ordenar usan el valor work_mem, que debe aumentarse con precaución.
Herramientas para la migración
La migración a PostgreSQL puede requerir algo de trabajo, pero existen herramientas que la comunidad ha desarrollado para ayudar con el proceso. Por lo general, convertirán/migrarán los datos de MySQL a PostgreSQL y recrearán tablas/índices. Los procedimientos o funciones almacenados son una historia diferente y, por lo general, requieren una reescritura manual, ya sea en parte o desde cero.
Algunas herramientas de ejemplo disponibles son pgloader y FromMySqlToPostgreSql. Pgloader es una herramienta escrita en Common Lisp que importa datos de MySQL a PostgreSQL mediante el comando COPY y carga datos, índices, claves externas y comentarios con conversión de datos para representar los datos correctamente en PostgreSQL según lo previsto. FromMySqlToPostgreSql es una herramienta similar escrita en PHP y puede convertir tipos de datos MySQL a PostgreSQL, así como claves e índices foráneos. Ambas herramientas son gratuitas, sin embargo, existen muchas otras herramientas (gratuitas y de pago) y se desarrollan recientemente a medida que se lanzan nuevas versiones de cada software de base de datos.
La conversión siempre debe incluir una evaluación en profundidad después de la migración para asegurarse de que los datos se hayan convertido correctamente y que la funcionalidad funcione como se esperaba. Siempre se recomienda realizar pruebas de antemano para los tiempos y la validación de datos.
Opciones de replicación
Si proviene de MySQL donde se ha utilizado la replicación, o si se necesita replicación por algún motivo, PostgreSQL tiene varias opciones disponibles, cada una con sus propias ventajas y desventajas, según lo que se necesite a través de la replicación.
-
Integrado:
De forma predeterminada, PostgreSQL tiene su propio modo de replicación incorporado para la recuperación de un punto en el tiempo (PITR). Esto se puede configurar utilizando el envío de registros basado en archivos, donde los archivos de registro de escritura anticipada se envían a un servidor en espera donde se leen y reproducen, o Streaming Replication, donde un servidor en espera de solo lectura obtiene los registros de transacciones a través de una conexión de base de datos para reproducirlos. ellos.
Cualquiera de estas opciones integradas se puede configurar como "modo de espera en caliente" o "modo de espera en caliente". Un "modo de espera en caliente" no permite conexiones, pero está listo para convertirse en maestro en cualquier momento para reemplazar a un maestro que tiene problemas . Un "modo de espera en caliente" permite que las conexiones de solo lectura se conecten y emitan consultas, además de estar listo para convertirse en un maestro de lectura/escritura en cualquier momento si es necesario.
-
Slony:
Una de las herramientas de replicación más antiguas para PostgreSQL es Slony, que es un método de replicación basado en activadores que permite un alto nivel de personalización. Slony permite la configuración de un nodo maestro y cualquier cantidad de nodos réplica, y la capacidad de cambiar el maestro a cualquier nodo deseado, y permite que el administrador elija qué tablas (si no quiere todas las tablas) replicar. Se ha utilizado no solo para replicar datos en caso de falla/equilibrio de carga, sino también para enviar datos específicos a otros servicios, o incluso actualizaciones mínimas de tiempo de inactividad, ya que la replicación puede pasar por diferentes versiones de PostgreSQL.
Slony tiene el requisito principal de que cada tabla que se va a replicar tenga una CLAVE PRINCIPAL o un índice ÚNICO sin columnas anulables.
-
Bucardo:
Cuando se trata de opciones multimaestro, Bucardo es uno de los pocos para PostgreSQL. Al igual que Slony, es un paquete de software de terceros que se encuentra sobre PostgreSQL. Bucardo se autodenomina "un sistema de replicación asíncrono de PostgreSQL, que permite operaciones tanto de múltiples maestros como de múltiples esclavos". El principal beneficio es la replicación multimaestro, que funciona bastante bien, sin embargo, carece de resolución de conflictos, por lo que las aplicaciones deben estar al tanto de los posibles problemas y solucionarlos en consecuencia.
También existen muchas otras herramientas de replicación, y encontrar la que funcione mejor para una aplicación depende de las necesidades específicas.
Comunidad
PostgreSQL tiene una comunidad próspera dispuesta a ayudar con cualquier problema o información que pueda ser necesaria.
-
IRC
Una sala de chat IRC activa llamada #postgresql está disponible en freenode, ya que los administradores y desarrolladores de todo el mundo chatean sobre PostgreSQL y proyectos/problemas relacionados. Incluso hay salas más pequeñas para detalles como Slony, Bucardo y más.
-
Listas de correo
Hay un puñado de listas de correo de PostgreSQL para "general", "administrador", "rendimiento" e incluso "principiante" (un excelente lugar para comenzar si es nuevo en PostgreSQL en general). Muchas personas en todo el mundo están suscritas a las listas de correo y proporcionan una gran cantidad de recursos muy útiles para responder a cualquier pregunta que necesite respuesta.
Puede encontrar una lista completa de las listas de correo de PostgreSQL en https://www.postgresql.org/list/
-
Grupos de usuarios
Los grupos de usuarios son un excelente lugar para involucrarse y participar activamente en la comunidad, y muchas ciudades grandes en todo el mundo tienen un Grupo de usuarios de PostgreSQL (PUG) disponible para unirse y asistir, y si no, considere iniciar uno. Estos grupos son excelentes para establecer contactos, aprender nuevas tecnologías e incluso simplemente hacer preguntas en persona a personas de cualquier nivel de experiencia.
-
Documentación
Lo más importante es que PostgreSQL está muy bien documentado. Cualquier información sobre parámetros de configuración, funciones de SQL, uso, todo se puede aprender fácilmente a través de la documentación oficial proporcionada en el sitio web de PostgreSQL. Si algo no está claro, la comunidad ayudará en las opciones descritas anteriormente.