gpt4 book ai didi

postgresql - 使 postgresql 时间戳唯一

转载 作者:行者123 更新时间:2023-11-29 13:54:31 24 4
gpt4 key购买 nike

我有一个包含 600 万行以上的数据集,包括从 2003 年到现在的时间戳。 2014年数据库迁移到postgresql,由于timestamp精度更高,timestamp列变得唯一。未迁移原始 ID 列。大约 300k 的时间戳至少重复一次。我想通过添加精度来修改时间戳列,以便它们是唯一的(所有非唯一的时间戳只转到第二个)。

我有这个

ts                    message
--------------------|---------------
2014-02-01 07:40:37 | message1
2014-02-01 07:40:37 | message2

我要这个

ts                         message
-------------------------|---------------
2014-02-01 07:40:37.0000 | message1
2014-02-01 07:40:37.0001 | message2

最佳答案

这应该可行,但我猜它会非常慢:

update the_table
set ts = ts + '1 millisecond'::interval * x.rn
from (
select ctid, row_number() over (order by ts) as rn
from the_table
) x
where the_table.ctid = x.ctid;

ctid 是一个 internal unique identifier (实际上是行的物理地址)由 Postgres 维护。

您可能想要添加另一个 where 条件以仅挑选出那些需要修改的行。

关于postgresql - 使 postgresql 时间戳唯一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34894771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com