PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Créer un grand entier à partir de la grande extrémité d'un uuid dans PostgreSQL

Rapide et sans SQL dynamique

Convertir les 16 premiers chiffres hexadécimaux d'un UUID en représentation textuelle en bitstring bit(64) et transmettez-le à bigint . Voir :

Idéalement, les chiffres hexadécimaux en excès à droite sont tronqués dans le cast en bit(64) automatiquement - exactement ce dont nous avons besoin.

Postgres accepte différents formats d'entrée. Votre littéral de chaîne donné en fait partie :

14607158d3b14ac0b0d82a9a5a9e8f6e

La représentation textuelle par défaut d'un UUID (et le text sortie dans Postgres pour le type de données uuid ) ajoute des traits d'union à des endroits prédéfinis :

14607158-d3b1-4ac0-b0d8-2a9a5a9e8f6e

Le manuel :

Si le format d'entrée peut varier, supprimez d'abord les traits d'union pour être sûr :

SELECT ('x' || translate(uuid_as_string, '-', ''))::bit(64)::bigint;

Diffuser uuid entrée avec uuid::text .

db<>violon ici

Notez que Postgres utilise signed entier, donc le bigint déborde sur des nombres négatifs dans la moitié supérieure - ce qui ne devrait pas être pertinent à cette fin.

Conception de la base de données

Si possible, ajoutez un bigserial colonne à la table sous-jacente et l'utiliser à la place.