我有一个系统,其 uuid 值使用建议的 UUID7 格式。UUID7 将时间戳编码到其值中。PostgreSQL 是否记录了 ORDER BY 子句如何与 UUID 数据类型配合使用?
https://www.postgresql.org/docs/current/datatype-uuid.html 这里没有关于排序的注释。
lab7=# SELECT resource_id, uuid, created_timestamp from resource where "name" in ('ABC000004',
'ABC000003') order by uuid, "name" desc;
resource_id | uuid | created_timestamp
-------------+--------------------------------------+----------------------
------
17704701 | 018ec350-6976-79d5-b0f5-41af99b98fa4 | 2024-04-09 14:43:30.6
09909
17704718 | 018ec353-ee50-7765-9e8b-3ebf22654662 | 2024-04-09 14:47:21.3
78086
比较最左边的字符(假设这是一个字符串),我希望 018ec353 在结果集中出现在 018ec350 之前。由于它不存储为字符串,因此该假设可能很幼稚。
性能方面,按这里的resource_id或create_timestamp排序性能更高,但我希望对唯一递增的resource_id、全局唯一的uuid和created_timestamp进行排序全部对齐。(按 desc 排序时,最新创建的条目首先排序)
是否有关于如何执行此排序以及为什么我的假设是错误的任何详细信息?
这是一个 XY Problem™ - 您似乎假设修饰符
desc
适用于order by
子句中的所有列,而它仅适用于"name"
, 并且uuid
默认情况下按升序排序。为了回答实际问题,对 RFC 4122 的拟议更改包括以下声明:
Postgres使用 来比较 UUID
memcmp()
。