psql 9.5: gen_random_uuid () no funciona

16

SELECT gen_random_uuid()

produce salida

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.

Corrí CREATE EXTENSION pgcrypto;en la base de datos seleccionada y SELECT gen_random_bytes(1)funciona perfectamente ( gen_random_bytesno funciona en otras bases de datos donde la pgcryptoextensión no se creó manualmente).

% psql --version
psql (PostgreSQL) 9.5.3

La versión de Ubuntu es 16.04.

d9k
fuente

Respuestas:

27

puede verificar si las funciones se definen usando

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

o:

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

Si ambas funciones no están definidas, es probable que haya tenido un error con la creación de la extensión, simplemente suéltelo y vuelva a crearlo:

drop extension pgcrypto;
CREATE EXTENSION pgcrypto;
Cohenjo
fuente
La función to_regprocno existe o bien: ERROR: function to_regproc(unknown) does not exist.
d9k
Qué versión estás usando? Esto se agregó recientemente ... Pruebe la consulta pg_proc.
cohenjo
cohenjoOk, lo tengo select version()me dio PostgreSQL 9.3.12 on x86_64-unknown-linux-gnu...que actualicé Ubuntu de 14.04 a 16.04 pero el servidor psql no se actualizó correctamente, creo. psql --versionrealmente me muestra 9.5.3, eso me confundió mucho.
d9k
1
Instalé la versión 9.5 postgresql pero no reemplazó la versión 9.3 existente, ¡solo comenzó junto pero en el otro puerto! Así que había dos versiones instaladas y tuve que mover y actualizar las bases de datos existentes de 9.3 a 9.5 con este tutorial wiki.postgresql.org/wiki/Using_pg_upgrade_on_Ubuntu/Debian Pero incluso después de esta actualización para hacer el gen_random_uuid()trabajo tuve que recrear manualmente la extensión ( drop extension pgcrypto; CREATE EXTENSION pgcrypto;) como asumiste Gracias @cohenjo!
d9k
1
Usé CREATE IF NOT EXISTSy tuve este error. Consecuente DROP EXTENSION pgcryptoy CREATE EXTENSION pgcryptoayudado. Gracias.
Zon