psql 9.5: gen_random_uuid () ne fonctionne pas


16

SELECT gen_random_uuid()

produit une sortie

ERROR:  function gen_random_uuid() does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.

J'ai couru CREATE EXTENSION pgcrypto;sur la base de données sélectionnée et SELECT gen_random_bytes(1)fonctionne parfaitement ( gen_random_bytesne fonctionne pas sur d'autres bases de données où l' pgcryptoextension n'a pas été créée manuellement).

% psql --version
psql (PostgreSQL) 9.5.3

La version Ubuntu est 16.04.

Réponses:


27

vous pouvez vérifier si les fonctions sont définies en utilisant

select pg_get_functiondef(to_regproc('gen_random_bytes'));
select pg_get_functiondef(to_regproc('gen_random_uuid'));

ou:

select * from pg_proc where proname like 'gen_random_%';

si les deux fonctions ne sont pas définies, vous avez probablement eu une erreur avec la création de l'extension - il suffit de la supprimer et de recréer:

drop extension pgcrypto;
CREATE EXTENSION pgcrypto;

Fonction to_regprocn'existe pas non plus : ERROR: function to_regproc(unknown) does not exist.
d9k

Quelle version utilisez-vous? Cela n'a été ajouté que récemment ... Essayez la requête pg_proc.
cohenjo

cohenjo, OK j'ai compris. select version()m'a donné PostgreSQL 9.3.12 on x86_64-unknown-linux-gnu...mis à jour Ubuntu du 14.04 au 16.04 mais le serveur psql n'a pas été mis à niveau correctement, je pense. psql --versionme montre vraiment 9.5.3, ça m'a beaucoup dérouté.
d9k

1
J'ai installé la version 9.5 postgresql mais elle n'a pas remplacé la version 9.3 existante, elle a juste commencé à côté mais sur l'autre port! Il y avait donc deux versions installées et j'ai dû déplacer et mettre à niveau les bases de données existantes de 9.3 à 9.5 avec ce tutoriel wiki.postgresql.org/wiki/Using_pg_upgrade_on_Ubuntu/Debian Mais même après cette mise à niveau pour gen_random_uuid()fonctionner, j'ai dû recréer manuellement l'extension ( drop extension pgcrypto; CREATE EXTENSION pgcrypto;) comme vous avez supposé. Merci, @cohenjo!
d9k

1
J'ai utilisé CREATE IF NOT EXISTSet j'ai eu cette erreur. Conséquent DROP EXTENSION pgcryptoet CREATE EXTENSION pgcryptoaidé. Je vous remercie.
Zon
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.