Rápido e sem SQL dinâmico
Transmita os 16 primeiros dígitos hexadecimais de um UUID na representação de texto como bitstring
bit(64)
e converta isso para bigint
. Ver:Convenientemente, os dígitos hexadecimais em excesso à direita são truncados na conversão para
bit(64)
automaticamente - exatamente o que precisamos. O Postgres aceita vários formatos de entrada. Seu literal de string fornecido é um deles:
14607158d3b14ac0b0d82a9a5a9e8f6e
A representação de texto padrão de um UUID (e o
text
saída no Postgres para o tipo de dados uuid
) adiciona hífens em locais predefinidos:14607158-d3b1-4ac0-b0d8-2a9a5a9e8f6e
O manual:
Se o formato de entrada puder variar, retire os hífens primeiro para ter certeza:
SELECT ('x' || translate(uuid_as_string, '-', ''))::bit(64)::bigint;
Transmitir
uuid
real
entrada com uuid::text
. db<>fiddle aqui
Observe que o Postgres usa assinado inteiro, então o
bigint
transborda para números negativos na metade superior - o que deve ser irrelevante para este propósito. Design de banco de dados
Se possível, adicione um
bigserial
coluna para a tabela subjacente e use-a em vez disso.