PostgreSQL - 按 UUID 版本 1 时间戳排序

2024-02-01

我在用UUID版本1 https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)作为主键。我想按 UUID v1 时间戳进行排序。现在如果我做这样的事情:

SELECT id, title 
FROM table 
ORDER BY id DESC;

PostgreSQL 不按 UUID 时间戳对记录进行排序,而是按 UUID 字符串表示形式对记录进行排序,在我的情况下,这最终会产生意外的排序结果。

我是否遗漏了什么,或者 PostgreSQL 中没有内置的方法来执行此操作?


时间戳是 v1 UUID 的一部分。它以十六进制格式存储为数百纳秒,因为1582-10-15 00:00。该函数提取时间戳:

create or replace function uuid_v1_timestamp (_uuid uuid)
returns timestamp with time zone as $$

    select
        to_timestamp(
            (
                ('x' || lpad(h, 16, '0'))::bit(64)::bigint::double precision -
                122192928000000000
            ) / 10000000
        )
    from (
        select
            substring (u from 16 for 3) ||
            substring (u from 10 for 4) ||
            substring (u from 1 for 8) as h
        from (values (_uuid::text)) s (u)
    ) s
    ;

$$ language sql immutable;

select uuid_v1_timestamp(uuid_generate_v1());
       uuid_v1_timestamp       
-------------------------------
 2016-06-16 12:17:39.261338+00

122192928000000000是公历开始时间与 Unix 时间戳之间的间隔。

在您的查询中:

select id, title
from t
order by uuid_v1_timestamp(id) desc

为了提高性能,可以在其上创建索引:

create index uuid_timestamp_ndx on t (uuid_v1_timestamp(id));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PostgreSQL - 按 UUID 版本 1 时间戳排序 的相关文章

随机推荐

  • Rails 3. 按匹配次数排序(多对多)

    我在两个模型之间有多对多关联 class User lt ActiveRecord Base has many user works has many works through user works end class UserWork
  • 如何打印由字母组成的菱形? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我想了解如何打印钻石 如下所示 我是初学者 非常感谢您的帮助 给定一个字母 打印出一颗以 A 开头的钻石 所提供的字母位
  • 确定类型是否为匿名类型[重复]

    这个问题在这里已经有答案了 在C 3 0中 是否可以判断一个实例是否Type代表匿名类型 即使匿名类型是普通类型 您也可以使用一些启发式方法 public static class TypeExtension public static B
  • 每次保存文件时运行相应的单元测试

    我刚刚转而使用 PyCharm 作为我的主要 Python 编辑器 并且很想知道如何配置它 以便每次保存文件时 都会运行与修改后的文件相对应的单元测试 浏览文档后 我没有找到如何执行此操作的明确解释 当您运行单元测试时 您会得到一个新的单元
  • 南姜戈迁徙

    我已经做了 python manage py schemamigration TestDBapp1 initial python manage py schemamigration TestDBapp1 auto 成功地 但如果我输入 py
  • 获取表内的方法形式

    我之前问过一个问题 但我认为我没有正确地提出问题 这是我的代码 HTML
  • 最简单的跨浏览器检查协议处理程序是否已注册

    当用户单击带有自定义协议的链接时 例如myapp superlink 我需要启动应用程序或允许用户下载并运行配置应用程序 我正在寻找跨浏览器的方法来检查自定义协议是否已注册 我试图通过检查用户代理服务器端 对于 IE 来确定这一点 HKEY
  • 构建库代码的最佳方法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如果我是唯一的用户,可以避免 ROAuth 握手中的 PIN 步骤吗?

    Question 有没有办法避免在进行 OAuth 握手时手动输入 PIN Context 进行 ROAuth 握手时 系统会要求我输入通过以下链接获取的 PIN rm list ls library twitteR library ROA
  • 捕获 ThreadAbortException 时隐藏的 Throw 有何作用?

    我正在阅读一本关于一般 C 开发的书 并且已经读到了线程中止部分 这本书说 当你在另一个线程上调用 Thread Abort 时 该线程将抛出 ThreadAbortException 即使你试图抑制它 它也会自动重新抛出它 除非你做了一些
  • 将组件推送到组件数组 - ReactJS

    我对 React 数组有点迷失了 我想要做的是拥有组件 文章 数组 并且在该数组中我想要拥有标题和内容 我想要对该数组执行的操作是添加 删除并将其显示在我的页面上 那么我做错了什么 另外这个动作到底叫什么 代码来自ReactJS 演示 ht
  • jquery 图像映射调整大小

    我编写此函数是为了重新调整 onLoad 元素的位置以及用户是否调整浏览器窗口的大小 它在加载时工作正常 但在调整窗口大小时无法正确重新计算 我究竟做错了什么 var orig width jQuery imageMaps attr wid
  • React.js:数组和“违反了有关合并函数的关键假设”错误

    http jsfiddle net NV f54Xr http jsfiddle net NV f54Xr jsx React DOM var Dummy React createClass mixins React addons Link
  • 使用Python将ts转换为mp4[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 编辑问题以包括期望的行为 特定问题或错误以及重现
  • 使用 PhantomJS 运行 RequireJS/WireJS 应用程序

    我正在尝试执行一个使用 RequireJS 2 1 8 WireJS 0 10 2 和 PhantomJS 1 9 2 的基本应用程序 当使用 PhantomJS 运行应用程序时 这是我的目标 WireJS 无法加载 请参见下面的错误 使用
  • 中心导航栏链接没有品牌将其推到 Bootstrap 4 的右侧?

    我试图将我的导航栏链接居中 但是当我这样做时 我的品牌徽标将其推到右侧 因此它不居中 这是我的 html
  • AngularJS - 将 $resource.query 与 params 对象一起使用

    我正在尝试接起angular js http angularjs org并致力于找出一些记录较少的事情 考虑一下 我在服务器上有一个搜索方法 它接受查询参数并返回搜索结果的集合 并响应GET search json路线 Rails FWIW
  • Ag-grid:使用 AggFunc 时如何更改定义列标题名称?

    对于给定的列定义 当使用 aggFunc 时 headerName 以 func string 格式显示 我只希望标题显示我定义的字符串 当 AggFunc 为 null 时 此行为不存在 const columnDef any heade
  • 使 Appen 功能在 Google 谷歌表格/[重复]中运行得更快

    这个问题在这里已经有答案了 我有一个代码工作正常但没有优化 我是 Google App 脚本的新手 该代码执行以下操作 从外部URL获取数据 过滤数据 解析文件夹中包含的工作表中的数据 更改列标题 在特定列中附加内容 function my
  • PostgreSQL - 按 UUID 版本 1 时间戳排序

    我在用UUID版本1 https en wikipedia org wiki Universally unique identifier Version 1 date time and MAC address 作为主键 我想按 UUID v