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.