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
Обсуждают сегодня