小编Tim*_*Esk的帖子

在PostgreSQL中从uuid的大端创建大整数

我有一个第三方应用程序连接到我的PostgreSQL数据库中的视图。它要求视图具有主键,但不能处理UUID类型(这是视图的主键)。如果将UUID用作视图中的文本,它也不能将UUID作为主键。

我想做的就是将UUID转换为数字,然后将其用作主键。然而,

SELECT x'14607158d3b14ac0b0d82a9a5a9e8f6e'::bigint
Run Code Online (Sandbox Code Playgroud)

由于数字超出范围而失败。

因此,我想使用SQL占用UUID的大部分,并创建一个int8 / bigint。我应该澄清,维持秩序是“合乎需要的”,但我知道这样做会改变某些秩序。

我试过了:

SELECT x(substring(UUID::text from 1 for 16))::bigint
Run Code Online (Sandbox Code Playgroud)

但是用于转换十六进制的x运算符似乎不喜欢方括号。我将其抽象为一个函数,但是

SELECT hex_to_int(substring(UUID::text from 1 for 16))::bigint
Run Code Online (Sandbox Code Playgroud)

仍然失败。

如何从UUID的“大头”部分得到bigint?

postgresql uuid database-design types casting

3
推荐指数
2
解决办法
4542
查看次数

标签 统计

casting ×1

database-design ×1

postgresql ×1

types ×1

uuid ×1