Migrar una base de datos de MySQL a PostgreSQL en PrestaShop
Migrar una base de datos de MySQL a PostgreSQL en PrestaShop es un proceso técnico que, aunque no es común debido a que PrestaShop está diseñado nativamente para MySQL/MariaDB, puede ser necesario por razones de rendimiento, cumplimiento normativo o integración con sistemas legacy. Este artículo te guiará paso a paso, explicando cada etapa de forma clara y sencilla, incluso si no eres un experto en bases de datos.
¿Por qué migrar de MySQL a PostgreSQL en PrestaShop?
PrestaShop, por defecto, utiliza MySQL o MariaDB como motor de base de datos. Sin embargo, PostgreSQL ofrece ventajas como mejor manejo de concurrencia, cumplimiento de estándares SQL y funciones avanzadas de análisis. Migrar tu tienda a PostgreSQL puede ser útil si:
- Necesitas integrar PrestaShop con otras aplicaciones que ya usan PostgreSQL.
- Buscas mejorar la estabilidad en entornos con alta carga de transacciones.
- Requieres características específicas de PostgreSQL, como tipos de datos JSONB o índices parciales.
[INFO] Esta migración no es un proceso oficialmente soportado por PrestaShop. Requiere ajustes manuales y pruebas exhaustivas. Recomendamos hacerla solo si tienes experiencia técnica o cuentas con apoyo de un desarrollador.
Requisitos previos antes de empezar
Antes de tocar cualquier archivo o base de datos, asegúrate de tener lo siguiente:
- Acceso SSH al servidor donde está alojada tu tienda.
- Credenciales de administrador de MySQL y PostgreSQL.
- Herramientas de línea de comandos:
mysqldump,psql, ypgloader(opcional pero recomendado). - Copia de seguridad completa de tu tienda (archivos y base de datos MySQL).
- Entorno de pruebas para validar la migración sin afectar la tienda en producción.
[WARNING] No intentes esta migración directamente en producción. Siempre trabaja primero en un clon de tu tienda.
Paso 1: Exportar la base de datos MySQL de PrestaShop
El primer paso es extraer toda la información de tu base de datos MySQL original. Usaremos mysqldump para generar un archivo SQL compatible.
-
Conéctate a tu servidor vía SSH.
-
Ejecuta el siguiente comando, reemplazando
usuario_mysql,contraseñaynombre_bdcon tus datos:mysqldump -u usuario_mysql -p contraseña nombre_bd > prestashop_mysql.sql -
Verifica que el archivo se haya creado correctamente:
ls -lh prestashop_mysql.sql
Este archivo contendrá todas las tablas, datos, índices y procedimientos almacenados de tu tienda.
[TIP] Si tu base de datos es muy grande (más de 500 MB), considera usar
gzippara comprimirla:mysqldump ... | gzip > prestashop_mysql.sql.gz.
Paso 2: Convertir el esquema de MySQL a PostgreSQL
Aquí viene la parte más delicada. MySQL y PostgreSQL tienen diferencias sintácticas importantes:
- Los tipos de datos cambian (por ejemplo,
TINYINTse convierte aSMALLINT). - Las comillas invertidas (
`) de MySQL deben reemplazarse por comillas dobles (") en PostgreSQL. - Los motores de almacenamiento (MyISAM, InnoDB) no existen en PostgreSQL.
- Las funciones como
NOW()oCURDATE()deben adaptarse.
Puedes hacerlo de dos formas:
Opción A: Usar pgloader (recomendado para principiantes)
pgloader es una herramienta que automatiza la conversión. Si no la tienes instalada, hazlo con:
sudo apt-get install pgloader # En Debian/Ubuntu
Luego, crea un archivo de configuración migrar.load con este contenido:
LOAD DATABASE
FROM mysql://usuario_mysql:contraseña@localhost/nombre_bd
INTO postgresql://usuario_pg:contraseña_pg@localhost:5432/nombre_bd_pg
WITH include drop, create tables, create indexes, reset sequences,
disable triggers, batch rows = 10000
SET PostgreSQL PARAMETERS
maintenance_work_mem = '128MB',
work_mem = '12MB'
CAST type datetime to timestamptz drop default drop not null using zero-dates-to-null,
type date drop not null drop default using zero-dates-to-null;
Ejecuta:
pgloader migrar.load
Esto creará la base de datos PostgreSQL, importará los datos y ajustará tipos automáticamente.
Opción B: Manual (para control total)
Si prefieres hacerlo a mano, edita el archivo prestashop_mysql.sql con un editor de texto (como nano o sed) y realiza estos cambios:
- Reemplaza
`por". - Cambia
ENGINE=InnoDBoENGINE=MyISAMpor nada (elimínalo). - Convierte
TINYINT(1)aBOOLEAN. - Sustituye
AUTO_INCREMENTporSERIAL. - Cambia
NOW()porCURRENT_TIMESTAMP. - Ajusta las sentencias
INSERTpara que usen comillas simples (ya están, pero verifica).
Luego importa el archivo modificado a PostgreSQL:
psql -U usuario_pg -d nombre_bd_pg < prestashop_modificado.sql
[WARNING] La opción manual es propensa a errores. Siempre revisa los logs de PostgreSQL después de la importación.
Paso 3: Configurar PostgreSQL en PrestaShop
PrestaShop no tiene soporte nativo para PostgreSQL, por lo que debemos engañarlo un poco. Necesitamos modificar el archivo de configuración de la base de datos.
-
Accede a la carpeta raíz de tu PrestaShop (por ejemplo,
/var/www/html/mitienda). -
Edita el archivo
app/config/parameters.php(en PrestaShop 1.7+) oconfig/settings.inc.php(en versiones antiguas). -
Cambia los valores de conexión:
// Para PrestaShop 1.7+ 'database_host' => 'localhost', 'database_port' => '5432', 'database_name' => 'nombre_bd_pg', 'database_user' => 'usuario_pg', 'database_password' => 'contraseña_pg', 'database_prefix' => 'ps_', // Importante: forzar el driver 'database_engine' => 'PostgreSql', -
En versiones antiguas, edita
settings.inc.php:define('_DB_SERVER_', 'localhost'); define('_DB_NAME_', 'nombre_bd_pg'); define('_DB_USER_', 'usuario_pg'); define('_DB_PASSWD_', 'contraseña_pg'); define('_DB_PREFIX_', 'ps_'); define('_MYSQL_ENGINE_', 'PostgreSql');
[INFO] PrestaShop usa la clase
DbPDOque puede conectarse a PostgreSQL si el driver PDO_pgsql está instalado en PHP. Verifica conphp -m | grep pdo_pgsql.
Paso 4: Instalar y configurar el driver PDO PostgreSQL en PHP
Si tu servidor no tiene el driver, instálalo. El método varía según el panel de control:
-
Si usas Syspanel (HestiaCP): Accede al panel en
tu-dominio:2106, ve a "Servidores Web" > "PHP" y habilita la extensiónpdo_pgsql. Luego reinicia el servicio PHP. -
En servidores manuales (Ubuntu/Debian):
sudo apt-get install php-pgsql sudo systemctl restart php7.4-fpm # Ajusta la versión de PHP
Después de instalar, verifica que la extensión esté activa creando un archivo info.php con <?php phpinfo(); ?> y buscando "pdo_pgsql".
Paso 5: Probar la tienda migrada
Antes de celebrar, realiza pruebas exhaustivas:
- Inicio de sesión: Accede al back office y front office.
- Catálogo: Navega por categorías, productos y busca.
- Carrito: Añade productos, crea una orden de prueba.
- Módulos: Verifica que los módulos de terceros funcionen (muchos usan consultas MySQL específicas).
- Rendimiento: Monitorea la velocidad de carga.
Si encuentras errores, revisa los logs de PHP (/var/log/apache2/error.log) y PostgreSQL (/var/log/postgresql/postgresql-13-main.log).
[TIP] Usa la herramienta de "Diagnóstico" de PrestaShop en el back office (Parámetros de la tienda > Mantenimiento) para detectar problemas de base de datos.
Problemas comunes y soluciones
Error: "PDOException: could not find driver"
Significa que PHP no tiene el driver PostgreSQL. Vuelve al paso 4 y asegúrate de instalarlo correctamente.
Error: "Base de datos no encontrada"
Verifica que el nombre de la base de datos en PostgreSQL coincida exactamente con el que pusiste en parameters.php. PostgreSQL es sensible a mayúsculas/minúsculas.
Los módulos dejan de funcionar
Muchos módulos de PrestaShop tienen consultas SQL escritas específicamente para MySQL. Deberás revisar cada módulo y modificar sus archivos .php para que usen sintaxis compatible con PostgreSQL. Por ejemplo, cambiar NOW() por CURRENT_TIMESTAMP.
Problemas de codificación (caracteres extraños)
Asegúrate de que la base de datos PostgreSQL use UTF-8. Al crearla, especifica:
CREATE DATABASE nombre_bd_pg ENCODING 'UTF8' LC_COLLATE 'es_ES.UTF-8' LC_CTYPE 'es_ES.UTF-8' TEMPLATE template0;
Preguntas frecuentes (FAQ)
¿Puedo migrar sin perder datos?
Sí, si sigues los pasos correctamente y haces copias de seguridad. La migración exporta los datos existentes.
¿PrestaShop 8 es compatible con PostgreSQL?
No oficialmente. La migración requiere modificaciones en el código base y en módulos. No recomendamos hacerlo en versiones recientes sin soporte de desarrollador.
¿Afecta esto al SEO de mi tienda?
No directamente, pero si la migración causa errores o ralentiza la tienda, podría afectar la experiencia del usuario y, por tanto, el posicionamiento. Prueba todo antes de lanzar.
¿Puedo usar herramientas como Syspanel para facilitar la migración?
Syspanel (HestiaCP) te ayuda a gestionar servidores web y bases de datos, pero no automatiza la migración. Puedes crear la base de datos PostgreSQL desde el panel (puerto 2106) y luego seguir los pasos manuales.
Conclusión
Migrar una base de datos de MySQL a PostgreSQL en PrestaShop es un proyecto ambicioso que requiere paciencia y conocimientos técnicos. No es un proceso plug-and-play, pero con las herramientas adecuadas (como pgloader) y siguiendo esta guía paso a paso, puedes lograrlo. Recuerda siempre:
- Hacer copias de seguridad.
- Probar en un entorno separado.
- Ajustar módulos y temas que usen consultas MySQL específicas.
Si no te sientes seguro, contrata a un desarrollador especializado. Una migración mal hecha puede dejar tu tienda inaccesible. ¡Buena suerte!
