Обновление нескольких временных меток Postgres

Я пытаюсь обновить временные метки для 100 объектов в Postgres 12, используя следующий запрос:

UPDATE foo_bar AS c SET
created_at = c2.created_at
FROM (VALUES
    (101, '2021-09-27 14:54:00.0+00'),
    (153, '2021-06-02 14:54:00.0+00')
) as c2(id, created_at)
WHERE c.id = c2.id;

Где created_at представляет поле dateTimeField:

created_at = models.DateTimeField(auto_now_add=True)

Я получаю следующую ошибку:

ERROR:  column "created_at" is of type timestamp with time zone but expression is of type text

Я перепробовал множество вариантов значений created_at, но безрезультатно. Есть идеи, почему это не работает?

Спасибо @a_horse_with_no_name за ответ. Мне пришлось привести значения к временным меткам с временными зонами, как показано ниже:

UPDATE foo_bar AS c SET
created_at = c2.created_at
FROM (VALUES
    (101, '2021-09-27 14:54:00.0+00::timestamptz'),
    (153, '2021-06-02 14:54:00.0+00::timestamptz')
) as c2(id, created_at)
WHERE c.id = c2.id;

Документация по Postgres, объясняющая, как работает кастинг (ссылка):

Приведение определяет, как выполнить преобразование между двумя типами данных

По умолчанию, приведение может быть вызвано только явным запросом приведения, то есть явной конструкцией CAST(x AS typename) или x::typename.

Документация по Postgres объясняет timestamptz (link):

timestamptz принимается как сокращение для временной метки с часовым поясом

Вернуться на верх