每次我运行时migration:generate,它都会创建一个重新生成整个数据库架构的迁移(而不是仅针对最近对我的实体所做更改的迁移)。我正在使用最新版本的 Typeorm 0.2.7 版。
我的ormconfig.json是:
{
"host": "localhost",
"logging": false,
"port": 5432,
"synchronize": false,
"type": "postgres",
"entities": ["build/server/entity/*.js"],
"migrations": ["build/server/migration/*.js"],
"cli": {
"entitiesDir": "build/server/entity",
"migrationsDir": "build/server/migration"
},
"username": "***",
"password": "***",
"database": "***"
}
Run Code Online (Sandbox Code Playgroud)
当我运行时typeorm migration:generate -n SomeEntityChanges,新的迁移文件包含为我的所有实体创建和链接表的说明,即使它们中的大多数已经在build/server/migration.
当我运行时typeorm migration:run,我可以看到没有挂起的迁移,并且已经运行了覆盖现有实体的迁移(即它们在我的migrations表中)。
我错过了什么?该文档说,migration:generate命令应该只生成与最近变化的迁移。
这听起来可能真的很愚蠢,但我遇到了同样的问题,问题出在我的数据库的名称上。我的数据库名称是mydbLocal大写的 L,但是当 typeorm 读取以生成新的迁移时,它会查找,mydblocal并且由于没有具有该名称的模式,因此导致生成重新生成整个模式。这似乎是一个错误,因为在解析模式时它会查找小写模式,但在运行迁移时它会进入真实模式(大写 L)。
无论如何,我解决这个问题的方法是将我的数据库名称更改为全部小写,并将我的 ormconfig 数据库名称编辑为全部小写。
这是一个非常奇怪的情况,但这解决了我的问题。希望它也能对其他人有所帮助。
小智 5
正如前面提到的答案之一,对我来说问题确实是数据库名称的驼峰式大小写。将数据库名称更改为全部小写似乎已经解决了迁移生成问题。
但是,在我的新项目中,我注意到实体表名称覆盖似乎也具有相同的行为。奇怪的是,这对我之前的项目来说并不是一个问题。
//Previous table name causing migration file to regenerate
@Entity({
name: 'TempTable',
})
//New table name which stops the regeneration
@Entity({
name: 'temp_table',
})
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助面临同样问题的人。
这是因为您的数据库可能是空的。TypeOrm 计算实际代码库实体和实际数据库之间的差异,从而生成迁移。
检查您的 ormconfig.json,因为它是由 typeorm CLI 读取来生成迁移的内容,它可能指向一个空数据库,从而生成迁移中的所有表。
只需迁移数据库,然后再次运行生成即可。
| 归档时间: |
|
| 查看次数: |
12268 次 |
| 最近记录: |