TypeORM迁移重复生成默认值问题求助
解决TypeORM迁移重复生成默认值语句的问题
1. 让实体默认值和数据库存的完全一致
TypeORM生成迁移是对比实体定义和数据库元数据,要是两边的默认值字符串有差异(比如多了括号、空格不一样、大小写不同),就会误以为需要更新。
比如你用PostgreSQL,先查一下数据库里实际存的默认值:
SELECT column_default FROM information_schema.columns WHERE table_name = 'forget_passwords' AND column_name = 'expired_at';
然后把实体里的默认值改成和查询结果完全一样的写法,注意用函数式包裹(不要直接写字符串):
@Column({ type: 'timestamp', default: () => "now() + '00:03:00'::interval" }) expired_at: Date;
2. 同步数据库和实体的元数据
先把所有已生成的迁移都执行一遍:typeorm migration:run
然后跑typeorm schema:log看看实体和数据库有没有差异,要是显示无差异,之后生成迁移就不会重复出那行代码了。
3. 升级TypeORM到最新稳定版
有些旧版本的TypeORM在默认值对比逻辑上有bug,直接升级到最新版(比如npm install typeorm@latest)可能就能解决问题。
4. 极端情况:手动处理迁移
如果前面的方法都不管用,每次生成迁移后手动删掉重复的那行语句就行,不过这是临时方案,还是建议先搞定根源问题。
内容的提问来源于stack exchange,提问作者Farzad.Jafari
相关产品推荐
相关产品推荐

