🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Migrar una base de datos de MySQL a PostgreSQL en PrestaShop

Actualizado el 15 de octubre de 2025

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, y pgloader (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.

  1. Conéctate a tu servidor vía SSH.

  2. Ejecuta el siguiente comando, reemplazando usuario_mysql, contraseña y nombre_bd con tus datos:

    mysqldump -u usuario_mysql -p contraseña nombre_bd > prestashop_mysql.sql
    
  3. 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 gzip para 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, TINYINT se convierte a SMALLINT).
  • 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() o CURDATE() 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=InnoDB o ENGINE=MyISAM por nada (elimínalo).
  • Convierte TINYINT(1) a BOOLEAN.
  • Sustituye AUTO_INCREMENT por SERIAL.
  • Cambia NOW() por CURRENT_TIMESTAMP.
  • Ajusta las sentencias INSERT para 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.

  1. Accede a la carpeta raíz de tu PrestaShop (por ejemplo, /var/www/html/mitienda).

  2. Edita el archivo app/config/parameters.php (en PrestaShop 1.7+) o config/settings.inc.php (en versiones antiguas).

  3. 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',
    
  4. 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 DbPDO que puede conectarse a PostgreSQL si el driver PDO_pgsql está instalado en PHP. Verifica con php -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ón pdo_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:

  1. Inicio de sesión: Accede al back office y front office.
  2. Catálogo: Navega por categorías, productos y busca.
  3. Carrito: Añade productos, crea una orden de prueba.
  4. Módulos: Verifica que los módulos de terceros funcionen (muchos usan consultas MySQL específicas).
  5. 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!

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel