Juste un petit ajout à faire car je me suis retrouvé avec un résultat bizarre en essayant de modifier les UUIDs tels qu'ils ont été générés. J'ai trouvé le réponse par Rakesh est le plus simple et fonctionne bien, sauf dans les cas où l'on veut supprimer les tirets.
Pour référence :
UPDATE some_table SET some_field=(SELECT uuid());
Cela a parfaitement fonctionné tout seul. Mais quand j'ai essayé ça :
UPDATE some_table SET some_field=(REPLACE((SELECT uuid()), '-', ''));
Ensuite, toutes les valeurs résultantes étaient les mêmes (pas subtilement différentes - j'ai vérifié quatre fois avec un GROUP BY some_field
requête). Peu importe comment je situe les parenthèses, la même chose se produit.
UPDATE some_table SET some_field=(REPLACE(SELECT uuid(), '-', ''));
Il semble que lorsqu'on entoure la sous-requête pour générer un UUID avec REPLACE, la requête UUID n'est exécutée qu'une seule fois, ce qui est probablement une optimisation parfaitement logique pour des développeurs bien plus intelligents que moi, mais pas pour moi.
Pour résoudre ce problème, je l'ai simplement divisé en deux requêtes :
UPDATE some_table SET some_field=(SELECT uuid());
UPDATE some_table SET some_field=REPLACE(some_field, '-', '');
Une solution simple, évidemment, mais j'espère que cela fera gagner à quelqu'un le temps que je viens de perdre.
2 votes
Vous êtes vraiment sûr qu'ils sont identiques ? J'ai essayé, la plupart des caractères sont identiques, mais il y a quelques différences dans l'uuid généré.
0 votes
Oui, je confirme, c'est la même chose !
2 votes
Cela fonctionne pour moi - les différences sont mineures, mais elles sont là. Le moyen le plus rapide de vérifier est d'ajouter une contrainte UNIQUE à la colonne.
0 votes
Désolé de revenir sur un vieux message, mais
SET columnID = UUID()
fonctionne - c'est juste que si vous le faites sur un grand nombre de lignes, la majorité des caractères UUID seront identiques mais il y aura des différences subtiles. +1 à la réponse de PSU