#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. Спасибо, ваше решение устранило мою проблему после нескольких часов разных попыток