No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

¿Qué son las migraciones? Migraciones en Sequelize ORM

13/27
Recursos

Aportes 18

Preguntas 12

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

Ya he visto varios archivos que terminan en rc, solo para satisfacer mi curiosidad lo investigue y les comparto:
rc: “run commands”, se usa en sistemas unix como pre-ejecutador de un archivo, carga esos comandos antes de proceder con la rutina normal de ejecución

Las migraciones son:

Las migraciones son la forma en que Django propaga cambios en los modelos y los refleja en el esquema de bases de datos. - Django.

Las migraciones son como un sistema de control de versiones para la base de datos. - Laravel.

Es como un sistema de control de versiones para manejar los cambios desde el código y trackear los cambios en la base de datos. - Sequelize.

Básicamente, las migraciones mantienen el historial del esquema que se lleva en la base de datos. Es un sistema muy usado en ambientes de producción para trackear los cambios sin tener que replicar todo nuevamente (creación de tablas, llaves foráneas, etc). Es decir, permite saber en qué punto estaba para saber qué es lo que se tiene que modificar.

sequelize.sync() empieza a leer los modelos, crea tablas y hace relist (se sobrescribe información), no se aconseja que se corra en producción. Es mejor sincronizar con un sistema de migraciones.

Para correr migraciones se utiliza la librería sequelize-cli y se instala como dependencia de desarrollo con el comando npm i sequelize-cli -D.

Posteriormente, se crea un archivo de configuración .sequelizerc en la carpeta principal.

.sequelizerc:

module.exports = {
  'config': './db/config.js',
  'models-paths: './db/models',
  'migrations-paths: './db/migrations',
  'seeders-path': './db/seeders',
}
  • config → Dónde se encuentra la configuración, esta configuración se encuentra la conexión hacia la BD. El cli tiene su propia conexión, independientemente de la conexión de la aplicación porque esas conexiones corren a nivel de terminal.

  • models-paths → Dónde se encuentran los modelos.

  • migrations-paths → Dónde se encuentran las migraciones.

  • seeders-path → Dónde se encuentran las semillas de información, sirve mucho para pruebas unitarias, end to end, donde se necesitan semillas de información que es como cargar varios datos de información a la BD.


Se crean las carpetas migrations, models, seeders y el archivo config.js dentro de la carpeta db.

Sync se pronuncia como si lo estuvieras leyendo en español, “sinc”.
Therefore no es sin embargo, es POR LO TANTO, cambia un poco el sentido de la definición que da el profe, solo para aclarar

Por lo que entendí

Las migraciones son como un git para bases de datos relacionales, para no tener que reemplazar toda la base de datos sino solo agregar los cambios correspondientes.

🔧 Configuraciones

ℹ️ Repositorio: Link
Podemos definir una abstracción OOP, abstrayendo la clase Sequelize podemos recolectar desde variables de entorno de la siguiente forma:
.

.env Definición de variables de entorno.

# postgres and docker
PGDATABASE=
PGHOST=
PGPORT=
PGUSER=
PGPASSWORD=

config.js. Archivo de configuración de entorno.

 require('dotenv').config({ path: './src/config/.env' });
// code ...
/**
 * @description variables of database server
 */
export const database = {
    dbName: process.env.PGDATABASE,
    dbHost: process.env.PGHOST || 'localhost',
    dbPort: process.env.PGPORT || '5432',
    dbUser: process.env.PGUSER,
    dbPassword: process.env.PGPASSWORD,
};

Sequelize.js. Definición de librería driver.

import { Sequelize as SequelizeClient } from 'sequelize';
import { database } from '../config/config';

const USER = encodeURIComponent(database.dbUser);
const PASSWORD = encodeURIComponent(database.dbPassword);
const URI = `postgres://${USER}:${PASSWORD}@${database.dbHost}:${database.dbPort}/${database.dbName}`;

export default class Sequelize {
 /**
     * @description migration builder object
     */
    static migration() {
        return {
            development: {
                username: database.dbUser,
                password: database.dbPassword,
                database: database.dbName,
                host: database.dbHost,
                dialect: 'postgres',
            },
        };
    }
}

config.js. Archivo de configuración de entornos.

import Sequelize from './../libs/sequelize';

module.exports = Sequelize.migration;

.sequelizerc. Archivos de configuración sequelize.

require('@babel/register');

module.exports = {
    config: './src/mocks/config.js',
    'migrations-path': './src/mocks/migrations',
};

Pase por aquí que está explicado a detalle lo de las migraciones en sequelize.

con el comando: npx sequelize-cli init // te crea en automático la carpeta db ademas de sus otros componentes ya lo otro seria cambiar cosas, yo lo probé porque estuve leyendo la documentación de sequelize.

.sequelizerc

module.exports = {
  'config': './db/config.js',
  'models-path': './db/models/',
  'migrations-path': './db/migrations/',
  'seeders-path': './db/seeders/',
}

Esto es Django ya esta todo configurado y es automático, ahora veo el trabajo que nos ahorramos al usar frameworks

He tenido muchas dificultades con este curso, en lo personal no me gusta el docente. Deseo comentar: a quienes, después de apagar el computador, estando todo bien y cuando se vuelva aprender no se logra levantar docker en mysql y postgres, se debe cambiar el puerto de acceso, no es problema del firwell y si hay dificultad con pgadmin4, se debe cambiar la ip por el gateway

Analogía de las Migraciones de una Base de Datos con Git:
No sobrescriben ni guardan todo (eso es ineficiente), solo guardan los cambios.
·
En el mundo de las bases de datos, una migración se refiere a la transferencia de datos y esquemas de una base de datos a otra, y es un proceso que se utiliza para actualizar o mover datos de una base de datos a otra o para cambiar la estructura de una base de datos ya existente ✨.
·
Las migraciones pueden ser necesarias por diferentes razones, como por ejemplo, cuando se quiere actualizar a una nueva versión de una base de datos o cuando se necesita cambiar la estructura de la base de datos en sí. Sin embargo, las migraciones también pueden ser muy útiles para mantener un “registro” de los cambios realizados en una base de datos, de modo que en lugar de realizar los cambios manualmente o tener que sobrescribir toda la estructura de la base de datos y los datos almacenados en ella cada vez, la migración permite mantener un historial de los cambios que se han ido realizando, mejorando así la eficiencia y la fiabilidad de su gestión 🙏.
·
Esto en cierta forma es similar a cómo Git mantiene un control y registro de versiones a partir de los cambios en el código fuente. Solo que, mientras Git se enfoca en el seguimiento de cambios a nivel de archivo (donde cada cambio realizado en un archivo específico se guarda como una nueva versión del archivo en el repositorio), las Migraciones —en vez de rastrear cambios a nivel de archivo— se enfocan en el seguimiento de los cambios en la estructura y los datos de la base de datos: Guardando series de instrucciones SQL que se aplican a la base de datos para actualizar su estructura y sus datos 😎.

efinitivamente en esta clase me e vuelto experto en leer los errores y bucar la terminal es increible que no bien busco la solucion a una cosa y ya tengo que arreglaro otra

Otra manera de realizar la configuracion es la que sugiere la documentacion de sequelize en la parte del archivo .sequelizerc en donde viene sugerida de la siguiente manera:

// .sequelizerc

const path = require('path');

module.exports = {
  'config': path.resolve('config', 'database.json'),
  'models-path': path.resolve('db', 'models'),
  'seeders-path': path.resolve('db', 'seeders'),
  'migrations-path': path.resolve('db', 'migrations')
};

De igual manera se puede editar esa configuracion para personalizar los nombres de las carpetas, tambien el archivo database.json arrojara una configuracion por defecto.

Como cuesta de la clase n°13 a la n°19! 😦 pero a no bajar esos BRAZOS!! 😃

La migraciones están buenísimas, lamentablemente no hay una manera de implementarlas usando TS (hasta donde he podido investigar, pero si alguien conoce una y pudiera compartirla estaría muy agradecido).

a este nivel, me comence a preguntarme… y los backups donde quedan? encontre googleando este aporte de alguien de platzi espero que le sirva: https://platzi.com/tutoriales/1480-postgresql/2252-como-generar-una-backup-de-postgresql-y-como-restaurarla/

Los últimos minutos del video no se escucha nada

https://sequelize.org/docs/v6/other-topics/migrations/ la parte de las migraciones en sequelize