Я пытаюсь получить текущее время в формате UTC и вставить его в метку времени PostgreSQL. Но он не работает должным образом.
Я использую следующую команду:
INSERT INTO public.rt_block_height
VALUES(to_timestamp('2018-09-09 00:36:00.778653', 'yyyy-mm-dd hh24:mi:ss.MS.US'), 83.7)
Однако когда я проверяю результат, он выглядит так:
tutorial=# select * from rt_block_height;
time | block_height
-------------------------+--------------
2018-09-09 00:48:58.653 | 83.7
(1 row)
Я не знаю, что вызывает это несоответствие.
К вашему сведению, вот мой исходный код для таблицы:
CREATE TABLE IF NOT EXISTS public.rt_BLOCK_HEIGHT
(
"time" timestamp without time zone,
BLOCK_HEIGHT double precision
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
ALTER TABLE public.rt_BLOCK_HEIGHT
OWNER to postgres;
SELECT create_hypertable('rt_BLOCK_HEIGHT', 'time');





В строке формата есть логическая ошибка, так как нельзя использовать MS и US одновременно. Однако эта функция вам совсем не нужна, просто приведите строку к timestamp:
INSERT INTO public.rt_block_height
VALUES('2018-09-09 00:36:00.778653'::timestamp, 83.7)
to_timestampandto_dateexist to handle input formats that cannot be converted by simple casting. For most standard date/time formats, simply casting the source string to the required data type works, and is much easier.