Ошибка миграции Mikro-orm с типом свойства date и строкой типа поля

#typescript #postgresql #types #graphql #mikro-orm

#typescript #postgresql #типы #graphql #mikro-orm

Вопрос:

Я использую 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 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())`);

  

Ответ №2:

Столбец уже существует и определен как jsonb . Postgres не позволит вам преобразовать его в datetime, вам нужно сначала удалить его.

Поэтому настройте сгенерированный файл миграции так, чтобы сначала удалить столбец и повторно добавить его снова, или, если вы не знаете, как создавать запросы, вы можете удалить эту миграцию, закомментировать свойство, сгенерировать новое, которое удалит его для вас, выполнить его, а затем раскомментировать и сгенерировать новоеэто добавит его правильно.

Комментарии:

1. Спасибо, ваше решение устранило мою проблему после нескольких часов разных попыток