Comment créer un guid dans PostgreSQL
Comment créer un GUID dans le format Windows dans Postgresql 9.0+?
J'ai essayé la fonction
CREATE or REPLACE FUNCTION public.getguid() RETURNS varchar AS $BODY$
DECLARE
v_seed_value varchar(32);
BEGIN
select
md5(
inet_client_addr()::varchar ||
timeofday() ||
inet_server_addr()::varchar ||
to_hex(inet_client_port())
)
into v_seed_value;
return (substr(v_seed_value,1,8) || '-' ||
substr(v_seed_value,9,4) || '-' ||
substr(v_seed_value,13,4) || '-' ||
substr(v_seed_value,17,4) || '-' ||
substr(v_seed_value,21,12));
END; $BODY$ LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER;
de
http://postgresql.1045698.n5.nabble.com/newid-in-postgres-td1879346.html
Essayé
select getguid()
union all
select getguid()
mais il renvoie mêmes valeurs
"c41121ed-b6fb-c9a6-bc9b-574c82929e7e"
"c41121ed-b6fb-c9a6-bc9b-574c82929e7e"
Comment résoudre ce problème de manière que les lignes uniques sont-ils de retour?
Est-il une raison quelconque vous n'utilisez pas déjà fourni des fonctions? postgresql.org/docs/current/static/uuid-ossp.html
Que l'UUID de générateur utilise des valeurs qui ne changent pas au cours d'une transaction pour générer des Uuid, de sorte qu'il génère le même. C'est une mauvaise mise en œuvre; utiliser les fonctions officielles qu'a_horse_with_no_name liés.
Pourrait être un Windows question, le manque de précision: postgresql.org/message-id/[email protected]
Que l'UUID de générateur utilise des valeurs qui ne changent pas au cours d'une transaction pour générer des Uuid, de sorte qu'il génère le même. C'est une mauvaise mise en œuvre; utiliser les fonctions officielles qu'a_horse_with_no_name liés.
Pourrait être un Windows question, le manque de précision: postgresql.org/message-id/[email protected]
OriginalL'auteur Andrus | 2015-07-06
Vous devez vous connecter pour publier un commentaire.
PostgreSQL a la
uuid-ossp
extension qui est livré avec la norme distributions et il a 5 standard algorithmes de génération deuuid
s. Notez qu'unguid
est la version Microsoft de unuuid
, sur le plan conceptuel, ils sont la même chose.Alors:
Note également que, une fois que vous avez installé l'extension, PostgreSQL dispose d'un binaire réel
uuid
type, avec une longueur de 16 octets. Travailler avec le type binaire est beaucoup plus rapide que de travailler avec le texte l'équivalent, et il prend moins de place. Si vous avez besoin de la version de chaîne, vous pouvez simplement le jeter auxtext
:CREATE EXTENSION IF NOT EXISTS "uuid-ossp" SCHEMA public
mais a reçu l'erreurcould not open extension control file "/usr/pgsql-9.3/share/extension/uuid-ossp.control": No such file or directory
. Comment réparer ? En utilisant la norme de distro en"PostgreSQL 9.3.2 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3), 64-bit"
C'est étrange parce que le module devrait être inclus dans la distribution standard à son emplacement standard. Vous pourriez essayer de
CREATE EXTENSION pgcrypto
qui crée la fonctiongen_random_uuid()
qui renvoie un v4uuid
.J'ai essayé, mais a reçu l'erreur
could not open extension control file "/usr/pgsql-9.3/share/extension/pgcrypto.control": No such file or directory
Peut-être que quelque chose doit être installé dans le serveur ?Votre installation est bien évidemment pas la norme. Essayez de localiser le
*.control
fichiers sur votre système de fichiers avec lafind
commande, puis déplacer l'ensemble du contenu du répertoire où vous pouvez trouver ces fichiers sur/usr/pgsql-9.3/share/extension
.Il y a un seul fichier de contrôle
/usr/pgsql-9.3/share/extension/plpgsql.control
et il semble être dans le bon endroit. Pensions de liste contient la lignebaseurl=http://yum.postgresql.org/9.3/redhat/rhel-$releasever-$basearch
. Il ressemble à ce qui est utilisé pour l'installation. Peut-être certains de commande yum peut être utilisé afin d'ajouter d'autres extensions ?OriginalL'auteur Patrick