Búsqueda de sitios web

typescript - La migración de TypeORM no está creando las tablas requeridas, en su lugar solo crea una tabla llamada migration


Estoy construyendo una aplicación backend usando TypeScript, TypeORM y Postgres. Después de generar y ejecutar mis migraciones, en lugar de crear las tablas de las entidades que escribí, solo crea una única tabla vacía de 3 columnas llamada 'migrations'.

No entiendo por qué sucede eso. A continuación se muestra el comando que utilicé para generar mis migraciones:

"migration:generate": "typeorm-ts-node-commonjs -d ./src/database/data-source.ts migration:generate ./src/migration/default"

Este es el comando que utilicé para ejecutar las migraciones:

"migration:run": "typeorm-ts-node-commonjs -d ./src/database/data-source.ts migration:run"

Y así es como se ve mi código:

esta es mi instancia de DataSource:

export const AppDataSource = new DataSource({
 type: "postgres",
 host: process.env.DB_HOST,
 port: Number(process.env.DB_PORT),
 username: process.env.DB_USER,
 password: process.env.DB_PASSWORD,
 database: process.env.DB_NAME,
 synchronize: false,
 logging: false,
 entities: [`${__dirname}/**/entity/*.{ts,js}`],
 migrations: [`${__dirname}/**/migration/*.{ts,js}`],
});

Pido disculpas por imprimir en lugar de pegar el código aquí, pero dado que la migración parece bastante grande, dejaré una impresión de la misma aquí por si algo en ella ayuda a identificar el problema. Además, la migración fue generada automáticamente:

migración

¿Alguien tiene alguna idea de por qué no se están creando mis tablas? Cualquier ayuda sería apreciada.

Respuesta #1

Los comandos que estás usando parecen ser correctos, y cuando ejecutas una migración, un registro de la misma debería añadirse a tu base de datos y las tablas y datos en tu base de datos deberían crearse como se espera. El problema podría estar en el parámetro migrations en la configuración de tu fuente de datos. Si estás teniendo el mismo problema que yo tuve, donde las migraciones ubicadas en "src/migration/" no se estaban ejecutando, intenta usar la siguiente configuración para el parámetro migrations:

  migrations: ["src/migration/**/*.ts"],

¡Espero que ayude!

Respuesta #2

Deberías intentar con el siguiente script para migration:generate:

"migration:generate": "typeorm-ts-node-commonjs -d ./src/database/data-source.ts -- migration:generate ./src/migration/"

Elimina default porque estás usando path:

export const AppDataSource = new DataSource({
 ...
 migrations: [`${__dirname}/**/migration/*.{ts,js}`],
});

Después de ejecutar migration:generate, verifica cualquier archivo *.ts creado en ./src/migration y revisa los cambios (Si no funciona, por favor verifica las rutas de las entidades y migraciones).

Finalmente, ejecuta migration:run para aplicar los cambios en la base de datos.