Обновляйте поля временных меток с помощью now() постепенно

#sql #postgresql

Вопрос:

У меня есть столик

 id timestamp
1  2021-02-07 04:14:00
2  2021-02-07 04:14:00
3  2021-02-07 04:14:00
 

Как я могу обновить отметку времени с помощью now() 1 сек?
Ожидаемый результат:

 id timestamp
1  2021-08-17 04:14:00
2  2021-08-17 04:14:02
3  2021-08-17 04:14:03
 

Следующий запрос просто установите одинаковое время для всех записей:

 UPDATE some_table
      SET event_timestamp = now()
 

Комментарии:

1. Если предоставленный ответ решил вашу проблему, пожалуйста, примите его. Принятие ответа помогает более поздним спрашивающим, у которых возникает та же проблема. Далее он удаляет вопрос из очереди без ответа. Если этого недостаточно для решения вашей проблемы, пожалуйста, опубликуйте то, что осталось.

Ответ №1:

Вы можете использовать row_number() .

 update t
    set timestamp = now()   (seqnum - 1) * interval '1 second'
    from (select t.*,
                 row_number() over (partition by timestamp order by id) as seqnum
          from t
         ) tt
    where tt.id = t.id ;
 

Если id он действительно последовательный, вы можете использовать:

 update t
    set timestamp = now()   (id - 1) * interval '1 second';