Manejando Migraciones en PostgreSQL con Sequelize
Cuando trabajas en un proyecto colaborativo con PostgreSQL, es crucial que todos los desarrolladores mantengan el esquema de la base de datos actualizado de manera uniforme. Una herramienta eficaz para esto es Sequelize, un ORM (Object-Relational Mapping) que te permite gestionar migraciones en tu base de datos. En este artículo, aprenderás a crear, ejecutar y revertir migraciones usando Sequelize en un proyecto de equipo.
1. Instalación de Sequelize CLI
Para comenzar a trabajar con migraciones, necesitas instalar Sequelize y Sequelize CLI si aún no lo has hecho. Esto te permitirá gestionar migraciones fácilmente desde la línea de comandos.
# Instalar Sequelize y PostgreSQL como dependencia
npm install sequelize pg pg-hstore
# Instalar Sequelize CLI de manera global (o puedes agregarlo como devDependency)
npm install --save-dev sequelize-cli
Con esto, tendrás Sequelize y PostgreSQL listos para usar, y la CLI te permitirá crear y aplicar migraciones.
2. Configurar Sequelize
El siguiente paso es configurar Sequelize para que funcione con tu base de datos PostgreSQL. Utiliza la CLI para inicializar el proyecto con los archivos de configuración necesarios.
# Inicializar Sequelize en el proyecto
npx sequelize-cli init
Este comando creará una estructura de carpetas con un archivo config.json que necesitarás editar para que apunte a tu base de datos PostgreSQL.
3. Configurar el archivo config.json
Dentro del archivo config/config.json, configura tus credenciales de la base de datos para que Sequelize pueda conectarse correctamente a tu instancia de PostgreSQL.
{
"development": {
"username": "tu_usuario",
"password": "tu_contraseña",
"database": "nombre_base_de_datos",
"host": "127.0.0.1",
"dialect": "postgres"
},
"test": {
"username": "tu_usuario",
"password": "tu_contraseña",
"database": "nombre_base_de_datos_test",
"host": "127.0.0.1",
"dialect": "postgres"
},
"production": {
"username": "tu_usuario",
"password": "tu_contraseña",
"database": "nombre_base_de_datos_production",
"host": "127.0.0.1",
"dialect": "postgres"
}
}
Asegúrate de proporcionar la información correcta para los entornos de desarrollo, pruebas y producción.
4. Crear una migración
Las migraciones son cambios en el esquema de la base de datos que quieres aplicar de manera uniforme. Para crear una migración, usa el siguiente comando:
# Crear una nueva migración
npx sequelize-cli migration:generate --name nombre-de-la-migracion
Esto generará un archivo de migración dentro de la carpeta migrations/, donde puedes definir los cambios que deseas hacer en el esquema de la base de datos, como agregar o eliminar columnas, crear tablas, etc.
5. Ejecutar migraciones
Una vez que hayas definido la migración, puedes ejecutarla para aplicar los cambios en la base de datos. Esto asegura que todos los desarrolladores en el proyecto apliquen los mismos cambios en el esquema.
# Ejecutar todas las migraciones pendientes
npx sequelize-cli db:migrate
Este comando aplicará todas las migraciones que aún no se han ejecutado en la base de datos. De esta forma, tu base de datos local estará sincronizada con las últimas actualizaciones del proyecto.
6. Revertir migraciones
Si cometiste un error en una migración o deseas revertir un cambio, puedes hacerlo fácilmente usando el siguiente comando:
# Revertir la última migración
npx sequelize-cli db:migrate:undo
Este comando deshace la última migración que fue aplicada. Si necesitas revertir múltiples migraciones, puedes ejecutar el comando varias veces o usar:
# Revertir todas las migraciones
npx sequelize-cli db:migrate:undo:all
Esto revertirá todas las migraciones aplicadas en la base de datos.
7. Compartir migraciones en proyectos colaborativos
En un entorno colaborativo, las migraciones deben estar versionadas en tu sistema de control de versiones (como Git). Cuando un miembro del equipo introduce una nueva migración, el resto del equipo puede actualizar sus bases de datos locales ejecutando:
git pull origin main
npx sequelize-cli db:migrate
De esta manera, todos los miembros del equipo tendrán el esquema de base de datos actualizado, evitando conflictos entre diferentes versiones de la base de datos.