我有一个第三方应用程序连接到我的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?