Mikro orm迁移错误,属性类型为日期,字段类型为字符串



我使用graphql、typescript、mikro-orm和postgresql在post上实现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));');

我该如何修复这个错误?我需要更改哪些类型?

好吧,我解决了我的问题。在此之前,我要感谢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())`);

该列已存在,并定义为jsonb。Postgres不允许您将其转换为datetime,您需要先将其删除。

因此,调整您生成的迁移文件,使其首先删除列,然后重新添加;或者,如果您不知道如何构造查询,则可以删除此迁移,注释掉该属性,生成将为您删除的新迁移,执行它,然后取消注释并生成将正确添加它的新迁移。

相关内容

  • 没有找到相关文章

最新更新