1

我正在使用 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));');

我将如何解决此错误?我需要更改哪些类型?

4

2 回答 2

2

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

于 2020-09-22T12:58:08.247 回答
0

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

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

于 2020-09-21T17:51:21.860 回答