PostgreSQL高效生成UUID v7的扩展模块
pg_uuidv7是一个轻量级PostgreSQL扩展,专门用于生成符合版本7标准的UUID。该扩展提供UUID生成、时间戳提取和转换功能,性能接近原生函数。pg_uuidv7生成的UUID具有全局可排序性,适用于分布式系统,可作为主键或索引使用。此扩展易于安装,兼容多种操作系统和PostgreSQL版本。
pg_uuidv7
:在Postgres中使用新的v7 UUID一个小型Postgres扩展,用于在Postgres中创建有效的版本7 UUID。
这些是常规的Postgres UUID,因此可以用作主键、与字符串相互转换、包含在索引中等:
SELECT uuid_generate_v7(); uuid_generate_v7 -------------------------------------- 018570bb-4a7d-7c7e-8df4-6d47afd8c8fc (1 行)
可以提取这些UUID的时间戳部分:
SELECT uuid_v7_to_timestamptz('018570bb-4a7d-7c7e-8df4-6d47afd8c8fc'); uuid_v7_to_timestamptz ---------------------------- 2023-01-02 04:26:40.637+00 (1 行)
时间戳可以转换为v7 UUID:
SELECT uuid_timestamptz_to_v7('2023-01-02 04:26:40.637+00'); uuid_timestamptz_to_v7 -------------------------------------- 018570bb-4a7d-7630-a5c4-89b795024c5d (1 行) -- 对于日期范围查询,将第二个参数设置为true以将随机位归零 SELECT uuid_timestamptz_to_v7('2023-01-02 04:26:40.637+00', true); uuid_timestamptz_to_v7 -------------------------------------- 018570bb-4a7d-7000-8000-000000000000 (1 行)
uuid_generate_v7()
的速度几乎与原生的gen_random_uuid()
函数一样快。有关更多详细信息,请参阅基准测试。
版本7 UUID有几个优点。它们包含一个48位的Unix时间戳,精确到毫秒,并且将在遥远的未来(公元10899年)溢出。它们还包含74个随机位,这意味着每秒可以创建数十亿个而不会发生冲突。由于其结构,它们可以全局排序,并且可以在分布式系统中并行创建。
[!重要] 以下说明适用于x86_64 Linux。在其他架构上,请按照构建说明进行操作。