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.