NestJS, PortsgreSQL и TypeORM — миграции не выполняются должным образом

#postgresql #nestjs #typeorm

#postgresql #nestjs #typeorm

Вопрос:

При попытке запустить миграции TypeORM, либо автоматически при запуске приложения, либо вручную с помощью командной строки TypeORM, создается только таблица миграций (и она остается пустой). Сами файлы миграции не выполняются.

Вот мой tsconfig.json

 {
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "target": "es2017",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true
  }
}
  

Вот мой package.json

 ...
"typeorm": "node --require ts-node/register ./node_modules/typeorm/cli.js",
...
  

Вот мой ormconfig.json

 ...
"entities": ["dist/**/*.entity{.ts,.js}"],
"synchronize": true,
"migrationsRun": true,
"migrations ": ["dist/migrations/*{.ts,.js}"],
"cli": {
    "migrationsDir": "src/migrations"
  }
...
  

Файлы миграции создаются с помощью командной строки TypeORM, и они должны заполнить некоторые таблицы (инструкции insert). Они не связаны с изменениями в схеме базы данных.

Пожалуйста, кто-нибудь может помочь мне заставить это работать?

Комментарии:

1. запустите эту команду npx typeorm migration:run

2. Я пробовал, но единственное, что происходит, это то, что создается таблица миграций (если она еще не создана). Как будто файлы миграции, которые я создал с помощью инструкций insert, не найдены. Я проверил "migrations": ["dist/migrations/*{.ts,.js}"] , и все файлы (.ts и .js) на месте.

Ответ №1:

Это было глупо! Я думаю, что иногда самые простые проблемы труднее всего обнаружить.

Проблема была в ormconfig.json файле. Я удалил это пустое пространство ( "migrations ": ), и все работало просто отлично.

Ответ №2:

вы должны были синхронизироваться с false synchronize:false

И из терминала запустить

npx typeorm migration:generate -n AnyNameYouWant

После этого вы можете запустить

npx typeorm migration:run

Возможно, вам также придется выполнить nest build перед выполнением этих команд.

Комментарии:

1. Я забыл упомянуть, что файлы миграции, которые я создал, предназначены для заполнения некоторых таблиц (инструкции insert). Они не связаны с изменениями в схеме базы данных… Я отредактирую вопрос с помощью этой информации. Я пробовал с synchronize:false , но результат был тот же.

Ответ №3:

Я думаю, что это для синхронизации базы данных со схемой, и это не очень хорошая идея. «синхронизировать»: верно,