繁体   English   中英

如何修复:未发现数据库模式发生任何变化 - 无法生成迁移?

[英]How to fix: No changes in database schema were found - cannot generate a migration?

我搜索了很多,有几个这样的问题,但其中大多数没有任何答案或与我无关。

我将 TypeORM(v0.2.45) 与 Postgres 驱动程序一起使用,并且我的实体/模式在启用synchronize模式的情况下工作正常。

我的目标是从现有实体中反向生成迁移,但是它以某种方式失败了。

这是我在尝试生成迁移时得到的

❯ npm run migration:generate Coffee

> dri-mvp@0.0.1 migration:generate
> npm run build && npm run typeorm migration:generate -- -n "Coffee"


> dri-mvp@0.0.1 prebuild
> rimraf dist


> dri-mvp@0.0.1 build
> cross-env NODE_ENV=production nest build


> dri-mvp@0.0.1 typeorm
> cross-env NODE_ENV=production ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js --config dist/src/common/setup/config/orm.config.js "migration:generate" "-n" "Coffee"

No changes in database schema were found - cannot generate a migration. To create a new empty migration use "typeorm migration:create" command

这是我的 npm TypeORM 脚本

{
  "typeorm": "cross-env NODE_ENV=production ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js --config dist/src/common/setup/config/orm.config.js",
  "migration:generate": "npm run build && npm run typeorm migration:generate -- -n",
  "migration:run": "npm run typeorm migration:run"
}

orm.config.ts

import { Env } from '../../env';
import { join } from 'path';
import { SnakeNamingStrategy } from 'typeorm-naming-strategies';

export default {
  database: Env.isTest ? ':memory:' : process.env.DB_DATABASE || 'dri',
  type: Env.isTest ? 'sqlite' : 'postgres',
  port: Number(process.env.DB_PORT || 5432),
  username: process.env.DB_USERNAME || 'dri-user',
  password: process.env.DB_PASSWORD || 'dri-secret',
  host: process.env.DB_HOST || '127.0.0.1',
  ...(!Env.isProd && {
    synchronize: true,
    synchronizeOptions: {
      force: true,
    },
  }),
  autoLoadEntities: true,
  entities: [Env.isTest ? 'src/**/*.entity{.ts,.js}' : join(__dirname, './**/*.entity{.ts,.js}')],
  keepConnectionAlive: true,
  namingStrategy: new SnakeNamingStrategy(),
  logging: Env.isDev ? 'all' : 'error',
  migrations: [join(__dirname, './**/*.entity{.ts,.js}')],
  cli: {
    migrationsDir: 'migrations',
  },
};

当我尝试创建迁移时 - 它可以工作,但我想从目前失败的现有模式生成它。

附言

我尝试了删除所有表格并将它们全部放置到位但结果是相同的 - 没有生成任何东西。

派对迟到了,但也许它会帮助别人。

TypeOrm 将您的实体架构与数据库架构进行比较以了解任何更改。 如果没有发现两者之间的变化,则不会创建新的迁移。 因为您使用的是sync: true ,所以您的数据库已经使用 orm 代码进行了更新,因此不会生成任何迁移。

要为每个表生成迁移,您需要一次删除一个表,运行生成命令,然后运行迁移。 对所有表重复。

尝试删除dist文件夹,

重新运行npm run migration:generate Coffee ,或者你可以拆分npm run build然后稍后生成迁移

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM