Необходимо исправить временные метки в моей базе данных TimescaleDB (количество секунд, предоставленных TO_TIMESTAMP, было неправильным ровно в 1000 раз) - PullRequest
0 голосов
/ 26 июня 2019

У меня есть база данных 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"

1 Ответ

1 голос
/ 27 июня 2019

Я думаю, что, вероятно, было бы лучше создать новую гипертаблицу и выполнить вставку в select из старой гипертаблицы в новую. Или, возможно, делать это партиями. Это связано с тем, что шкала времени ограничивает обновление ключей разделения, чтобы элементы не перемещались между разделами. Вы можете сделать удаление, а затем вставку, чтобы заставить это работать аналогично, но будет более эффективно просто создать новую гипертаблицу, переместить все с правильными временными метками и затем переименовать, чем пытаться делать обновления и т. Д.

...