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.

d9k
la source

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;
cohenjo
la source
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