我有一个表,列是单调递增的整数(id
)。我需要更新列updated_at
(时间戳)以创建一个不断增加的时间戳系列,所有这些都是过去的。具体的步长并不重要,只要时间戳单调增加即可。
create table temp1 (
id serial not null,
bar varchar(35),
updated_at timestamp
)
;
insert into temp1
(bar)
values
('val1'),
('val2'),
('val3')
;
select * from temp1;
id | bar | updated_at
----+------+------------
1 | val1 | NULL
2 | val2 | NULL
3 | val3 | NULL
(3 rows)
实现此目的的一个简单方法是使用日期/时间数学运算符。例如,这将生成一个开始日期=过去3个月的时间戳序列,并将每行的时间戳与开始日期相比增加id
秒:
update temp1
set updated_at = (now() - interval '3 months' + interval '1 second' * id)
;
select * from temp1;
id | bar | updated_at
----+------+----------------------------
1 | val1 | 2023-01-06 17:49:59.644966
2 | val2 | 2023-01-06 17:50:00.644966
3 | val3 | 2023-01-06 17:50:01.644966
(3 rows)
参见:
- PostgreSQL: Documentation: 15:9 .9日期/时间函数和操作符
- 获取PostgreSQL中的日期列表
- 在PostgreSQL中生成两个日期之间的时间序列