У меня есть база данных TimescaleDB, в которой некоторые временные метки в нескольких таблицах неверны - я случайно дал функции TO_TIMESTAMP () число миллисекунд в Unix-времени вместо секунд. Таким образом, все эти точки данных с 1970 года в 1000 раз длиннее, чем они должны быть. Я легко могу выделить, какие из этих строк нужно исправить, проверив будущие даты в предложении where, но я немного застрял в том, как преобразовать и заменить эти неправильные метки времени. По сути, мне нужно получить представление времени Unix, разделить его на 1000 и заменить это значение в строке, но мой SQL слишком ржавый, чтобы собрать этот запрос воедино.
Я вижу, что могу использовать extract (epoch from), чтобы получить количество секунд, но как это сделать для каждой строки и затем обновить ее метку времени, мне не ясно.
Edit:
При использовании запроса:
UPDATE table_name
SET time = TO_TIMESTAMP(extract(epoch from time) / 1000.0)
WHERE
time > '2020-01-01 00:00:00';
Я получаю ошибку:
новая строка для отношения "_hyper_8_295_chunk" нарушает проверочное ограничение
"Constraint_295"