我正在使用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));');
如何解决此错误?我需要更改哪些类型?
答案 0 :(得分:0)
该列已存在,并定义为jsonb
。 Postgres不允许您将其转换为日期时间,您需要先将其删除。
因此,请调整生成的迁移文件,以首先删除该列并再次添加它,或者,如果您不知道如何构造查询,则可以删除此迁移,注释掉属性,生成新的迁移文件为您删除它,执行它,然后取消注释并生成可以正确添加它的新代码。
答案 1 :(得分:0)
好的,我解决了我的问题。在此之前,我要感谢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())`);