psql 9.5: gen_random_uuid () não está funcionando

16

SELECT gen_random_uuid()

produz saída

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.

Corri CREATE EXTENSION pgcrypto;no banco de dados selecionado e SELECT gen_random_bytes(1)funciona perfeitamente ( gen_random_bytesnão funciona em outros bancos de dados em que a pgcryptoextensão não foi criada manualmente).

% psql --version
psql (PostgreSQL) 9.5.3

A versão do Ubuntu é 16.04.

d9k
fonte

Respostas:

27

você pode verificar se as funções estão definidas usando

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_%';

se as duas funções não estiverem definidas, você provavelmente teve um erro na criação da extensão - basta soltá-la e recriar:

drop extension pgcrypto;
CREATE EXTENSION pgcrypto;
cohenjo
fonte
Função to_regproctambém não existe: ERROR: function to_regproc(unknown) does not exist.
d9k
Qual versão você está usando? Isso foi adicionado recentemente ... Tente a consulta pg_proc.
cohenjo
cohenjo, OK, entendi. select version()me deu que PostgreSQL 9.3.12 on x86_64-unknown-linux-gnu...eu atualizei o Ubuntu de 14.04 para 16.04, mas o servidor psql não foi atualizado corretamente, eu acho. psql --versionrealmente me mostra 9.5.3, isso me confundiu bastante.
d9k
1
Eu instalei a versão 9.5 do postgresql, mas ela não substituiu a versão 9.3 existente, apenas começou ao lado, mas na outra porta! Portanto, havia duas versões instaladas e eu tive que mover e atualizar os bancos de dados existentes da 9.3 para a 9.5 com este tutorial wiki.postgresql.org/wiki/Using_pg_upgrade_on_Ubuntu/Debian Mas mesmo após essa atualização para dar certo,gen_random_uuid() tive que recriar manualmente a extensão ( drop extension pgcrypto; CREATE EXTENSION pgcrypto;) como você assumiu. Obrigado, @cohenjo!
d9k
1
Eu usei CREATE IF NOT EXISTSe tive esse erro. Consequente DROP EXTENSION pgcryptoe CREATE EXTENSION pgcryptoajudou. Obrigado.
Zon