psql 9.5 : gen_random_uuid ()가 작동하지 않습니다


16

SELECT gen_random_uuid()

출력을 생성

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.

CREATE EXTENSION pgcrypto;선택한 데이터베이스에서 실행 했으며 SELECT gen_random_bytes(1)완벽하게 작동합니다 ( 확장 프로그램을 수동으로 만들지 않은 gen_random_bytes다른 데이터베이스에서는 작동하지 않습니다 pgcrypto).

% psql --version
psql (PostgreSQL) 9.5.3

우분투 버전은 16.04입니다.

답변:


27

당신은 기능을 사용하여 정의되어 있는지 확인할 수 있습니다

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

또는:

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

두 함수가 모두 정의되지 않은 경우 확장 기능 작성에 오류가있을 수 있습니다.이를 삭제하고 다시 작성하십시오.

drop extension pgcrypto;
CREATE EXTENSION pgcrypto;

함수 to_regproc가 존재하지 않습니다 : ERROR: function to_regproc(unknown) does not exist.
d9k

어떤 버전을 사용하고 있습니까? 최근에 추가 된 것입니다 ... pg_proc 쿼리를 시도하십시오.
cohenjo

cohenjo알았어 select version()PostgreSQL 9.3.12 on x86_64-unknown-linux-gnu...나는 16.04에 14.04에서 우분투를 업그레이드하지만 psql의 서버가 제대로 업그레이드되지 않은, 나는 생각한다. psql --version정말 9.5.3저를 많이 보여주었습니다 .
d9k

1
9.5 postgresql 버전을 설치했지만 기존 9.3 버전을 대체하지 않았으며 다른 포트와 함께 시작되었습니다! 따라서 두 가지 버전이 설치 되었으며이 자습서 wiki.postgresql.org/wiki/Using_pg_upgrade_on_Ubuntu/Debian 을 사용하여 기존 데이터베이스를 9.3에서 9.5로 이동하고 업그레이드 해야 했지만이 업그레이드 후에도 gen_random_uuid()작업을 수행하기 위해 확장 ( drop extension pgcrypto; CREATE EXTENSION pgcrypto;) 을 수동으로 다시 작성해야 했습니다. 당신은 가정했다. 감사합니다, @cohenjo!
d9k

1
나는 CREATE IF NOT EXISTS이 오류를 사용 했다. 결과적 DROP EXTENSION pgcrypto하고 CREATE EXTENSION pgcrypto있었습니다. 감사합니다.
Zon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.