如何解决属性类型日期和字段类型字符串的Mikro-orm迁移错误
我正在使用graphql,typescript,mikro-orm和postgresql在帖子上实现分类。属性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));');
解决方法
该列已存在,并定义为jsonb
。 Postgres不允许您将其转换为日期时间,您需要先将其删除。
因此,请调整生成的迁移文件,以首先删除该列并再次添加它,或者,如果您不知道如何构造查询,则可以删除此迁移,注释掉属性,生成新的迁移文件为您删除它,执行它,然后取消注释并生成可以正确添加它的新代码。
,好的,我解决了我的问题。在此之前,我要感谢Mikro-orm的创建者的答复。
我决定删除整个数据库并创建一个新数据库。
仍然无法正常工作,我发现yarn tsc -w
有一些错误,这意味着我不得不删除dist
文件夹并再次运行命令。
我终于开始收到不同的错误。我首先想到用type timestamptz(0)
替换type String
,但显然我不正确知道我的类型。
我搜索了一下,最后更改了类型:
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())`);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。