Обновить одну из дублирующихся строк Postgres

Есть таблица с полными дублями данных, допустим:

Create table Tbl  (val1 int, val2 int, val3 date);  
select * 
from (values  
     (1, 2, now()), (1, 2, now()), (1, 2, now()) ) 
     t(t1, t2, t3);

Дублей может быть сколь угодно много. Мне нужно сделать строки уникальными (конкретно, хочу добавить каждой дате по 1 секунде относительно предыдущей).

В ms sql я бы мог написать CTE с row_number'ом и updat'нуть само CTE - Постгрес такого не позволяет.

Есть ли возможность осуществить задуманное, не генеря доп столбец (с помощью которого можно будет различать записи)?


Ответы (1 шт):

Автор решения: ValNik

Если строки в таблице ничем не отличаются, можно сделать различение записей через использование SEQUENCE, который последовательно генерирует различные значения.
Посмотрите пример.

Create table Tbl  (val1 int, val2 int, val3 timestamp);  
insert into tbl
select * 
from (values  
     (1, 2, now()), (1, 2, now()), (1, 2, now()) ) 
     t(t1, t2, t3);
select * from tbl;
val1 val2 val3
1 2 2024-04-11 12:46:30.152795
1 2 2024-04-11 12:46:30.152795
1 2 2024-04-11 12:46:30.152795
create temporary sequence tsec start 1 increment 1;
update tbl
  set val3=val3+nextval('tsec')* interval '1 sec';
select * from tbl;
val1 val2 val3
1 2 2024-04-11 12:46:31.152795
1 2 2024-04-11 12:46:32.152795
1 2 2024-04-11 12:46:33.152795
→ Ссылка