created имеет тип timezone. Хочу привести исходные данные к этому типу с помощью postgre'вской функции TO_TIMESTAMP().
Как это сделать?
INSERT INTO data.source(created, created_utc) VALUES($1, $2)
Если вставляю функцию непосредственно в значения, то такая ошибка:
error: invalid input syntax for type timestamp with time zone: "TO_TIMESTAMP('1581569438')"
Если делаю так:
INSERT INTO data.source(created, created_utc) VALUES(TO_TIMESTAMP('$1'), TO_TIMESTAMP('$2'))
То ошибка следующая:
duplicate key value violates unique constraint "source_pkey"
> Если вставляю функцию непосредственно в значения Потому что "TO_TIMESTAMP('1581569438')" не является корректным представлением timestamptz. > Если делаю так: Это более-менее правильно (смотря какие там типы данных. > duplicate key value violates unique constraint "source_pkey" А вот это уже что-то совсем другое — смотрите, почему там duplicate.
С duplicate разобрался, а в чем еще мой косяк? Не очень понял
Я не знаю, как ещё объяснить. :( Что касается типов данных — я этой таблицы не видел, так что не знаю, правильно это или нет.
>"TO_TIMESTAMP('1581569438')" не является корректным представлением timestamptz Следует использовать другую функцию приведения типа? У меня просто timestamp with timezone
Там должна быть правильная константа (или параметр), которая может быть преобразована в тип timestamptz (например, '2021-01-08 07:35:32-05'), а не вот это вот. ;)
to_timestamp() используется для перевода Unix epoch в timestamp. по хорошему надо сделать параметр цифровой константой, в остальном валидный случай.
Причём тут "to_timestamp()"? ;) Там строка TO_TIMESTAMP('1581569438') передаётся в качестве параметра в INSERT INTO data.source(created, created_utc) VALUES($1, $2) И в этом-то и проблема. См. https://t.me/pgsql/274763
Обсуждают сегодня