2017-04-05 24 views
1

在postgresql上使用uuid_generate_v1()是否有任何订购保证?如何通过UUID对postgresql进行排序?

如果是,保证是每台机器还是无关紧要在哪台机器上生成UUID? (由于V1的UUID是由时间戳+ MAC地址,postgresql内部时间戳部分,然后由MAC?)。

我可以“排序”一个UUID类型列,并期望它始终工作(似乎工作)?

我想在多台机器上生成UUID(使用postgresql uuid_generate_v1()),将它们复制到一个postgresql实例,然后按UUID列排序。它必须保证机器的顺序,而不是所有机器的UUID的顺序。

感谢。

+0

时间戳可以从UUID(v1)中提取。你见过这个吗? http://stackoverflow.com/questions/37713131/postgresql-sort-by-uuid-v1-timestamp –

+0

我看到它,但没有建议的函数对此答案排序也似乎工作(与普通的ORDER BY列)。不确定它是否与机器无关。 –

回答

0

UUID并非设计用于订购。

如果要根据创建顺序选择记录,应使用时间戳date_creation,auto-increment列(不适用于您的特定情况),或者使用保证排序的算法创建自己的ID;例如,连接时间戳+ UUID或时间戳+自动递增。

您可以在数据库中为以后的选项创建一个function

+0

时间戳的问题是它们不能保证唯一。时间戳+ uuid的连接是独特的,可能是我的解决方案。问题是,是否比通过时间戳,uuid子句进行排序更快速地形成时间戳+ uuid? –

+0

整数时间戳比字符串时间戳要快很多。串联会使您的索引变慢,然后使用两个专用列。 –

相关问题