属性类型日期和字段类型字符串的 Mikro-orm 迁移错误
Posted
技术标签:
【中文标题】属性类型日期和字段类型字符串的 Mikro-orm 迁移错误【英文标题】:Mikro-orm Migration error with the property type date and field type string 【发布时间】:2021-01-07 17:46:46 【问题描述】:我正在使用 graphql、typescript、mikro-orm 和 postgresql 在帖子上实现 crud。 createdAt 的属性有问题:
DriverException: alter table "post" alter column "created_at" type timestamptz(0) using ("created_at"::timestamptz(0)); - cannot cast type jsonb to timestamp with time zone
这是 createdAt 属性的实体:
@Field(() => String)
@Property( type: "date" )
createdAt = new Date();
这两个是createdAt实体生成的迁移
this.addSql('alter table "post" drop constraint if exists "post_created_at_check";');
this.addSql('alter table "post" alter column "created_at" type timestamptz(0) using ("created_at"::timestamptz(0));');
我将如何解决此错误?我需要更改哪些类型?
【问题讨论】:
【参考方案1】:好的,我解决了我的问题。在此之前,我要感谢 Mikro-orm 的创建者的回复。
我决定删除整个数据库并创建一个新数据库。
它仍然没有工作,我发现yarn tsc -w
有一些错误,这意味着我必须删除dist
文件夹并再次运行该命令。
我终于开始收到不同的错误。我最初想用type String
替换type timestamptz(0)
,但显然我不知道我的类型。
找了一圈,终于换了类型:
this.addSql(`CREATE TABLE "post" ("id" SERIAL NOT NULL, "title" character varying NOT NULL, "createdAt" TIMESTAMP NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP NOT NULL DEFAULT now())`);
【讨论】:
【参考方案2】:该列已存在并定义为jsonb
。 Postgres 不允许您将其转换为日期时间,您需要先将其删除。
所以调整你生成的迁移文件,首先删除列并重新添加它,或者如果你不知道如何构造查询,你可以删除这个迁移,注释掉属性,生成新的为您删除它,执行它,然后取消注释并生成将正确添加它的新的。
【讨论】:
以上是关于属性类型日期和字段类型字符串的 Mikro-orm 迁移错误的主要内容,如果未能解决你的问题,请参考以下文章