我有一个时间序列数据表,对于几乎所有查询,我希望选择按收集时间排序的数据。我有一个时间戳列,但我不想为此使用实际的时间戳,因为如果两个条目具有相同的时间戳,那么我能够按照它们被收集的顺序对它们进行排序是至关重要的,这就是我所拥有的信息。插入时间。
我当前的架构只有一个时间戳列。如何更改我的架构以确保我可以根据收集/插入时间进行排序,并确保以收集/插入顺序查询是否有效?
答案 0 :(得分:2)
根据序列(即序列)添加列,并在(timestamp_column,serial_column)上创建索引。然后您可以通过执行以下操作来获取插入顺序(<或p>)
ORDER BY timestamp_column, serial_column;
答案 1 :(得分:1)
您可以使用名为insert_order的SERIAL列。这样就不会有两行具有相同的值。但是,我不确定您是否可以实现绝对时间顺序的要求。
例如,假设存在两个事务,T1和T2,它们确实同时发生,并且您在具有多个处理器的计算机上运行,因此实际上T1和T2都在完全相同的时刻执行了插入。这是你关注的案例吗?没有足够的信息你的问题确切知道。
同样使用串行列,您会遇到间隙问题,例如T1云抓取序列值14和T2可以获取值15,然后T1回滚而T2不会,所以你必须期望insert_order列可能有其中的差距。