PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Crie um grande inteiro a partir do grande final de um uuid no PostgreSQL

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.