확장이 있지만 uuid_generate_v4가 실패 함


94

Amazon ec2 RDS Postgresql에서 :

=> SHOW rds.extensions;

rds.extensions                                                                                                                                 
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 btree_gin,btree_gist,chkpass,citext,cube,dblink,dict_int,dict_xsyn,earthdistance,fuzzystrmatch,hstore,intagg,intarray,isn,ltree,pgcrypto,pgrowlocks,pg_trgm,plperl,plpgsql,pltcl,postgis,postgis_tiger_geocoder,postgis_topology,sslinfo,tablefunc,tsearch2,unaccent,uuid-ossp
(1 row)

보시다시피 uuid-ossp확장이 존재합니다. 그러나 생성을 위해 함수를 호출 uuid_v4하면 실패합니다.

CREATE TABLE my_table (
    id uuid DEFAULT uuid_generate_v4() NOT NULL,
    name character varying(32) NOT NULL,

);

이것에 무슨 문제가 있습니까?


5
앞으로는 항상 오류 메시지 의 정확한 텍스트 를 보여 주시기 바랍니다 .
Craig Ringer

답변:


193

확장을 사용할 수 있지만 이 데이터베이스에 설치되어 있지 않습니다 .

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

17
명령은 다음과 같아야합니다CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
boatcoder

7
명확하게 \c <db name>말하자면, pgsql 콘솔에서 쓸 수있는 db를 선택하려면
ElementalStorm

@CraigRinger이 문서는 어디에서 찾을 수 있습니까?
Abhishek Mani

23

확장이 이미 있지만 describe functions \ df 명령을 수행 할 때 uuid_generate_v4 () 함수가 표시되지 않으면 확장을 삭제하고 다시 추가하여 함수도 추가하면됩니다. 다음은 문제 복제입니다.

db=# \df
                       List of functions
 Schema | Name | Result data type | Argument data types | Type
--------+------+------------------+---------------------+------
(0 rows)
CREATE EXTENSION "uuid-ossp";
ERROR:  extension "uuid-ossp" already exists
DROP EXTENSION "uuid-ossp";
CREATE EXTENSION "uuid-ossp";
db=# \df
                                  List of functions
 Schema |        Name        | Result data type |    Argument data types    |  Type
--------+--------------------+------------------+---------------------------+--------
 public | uuid_generate_v1   | uuid             |                           | normal
 public | uuid_generate_v1mc | uuid             |                           | normal
 public | uuid_generate_v3   | uuid             | namespace uuid, name text | normal
 public | uuid_generate_v4   | uuid             |                           | normal

db=# select uuid_generate_v4();
           uuid_generate_v4
--------------------------------------
 b19d597c-8f54-41ba-ba73-02299c1adf92
(1 row)

아마도 과거의 어느 시점에서 확장이 원래 클러스터에 추가 된 후 나중에 해당 클러스터 내에 새 데이터베이스를 만들었을 것입니다. 이 경우 새 데이터베이스는 확장을 "인식"할뿐 확장을 추가 할 때 발생하는 uuid 함수가 추가되지 않습니다. 따라서 다시 추가해야합니다.


17

필요한 특정 데이터베이스에 확장이 설치되지 않은 것 같습니다.

이 특정 데이터베이스에 연결해야합니다.

 \CONNECT my_database

그런 다음이 데이터베이스에 확장을 설치하십시오.

 CREATE EXTENSION "uuid-ossp";

4

이것은 나를 위해 일했습니다.

create extension IF NOT EXISTS "uuid-ossp" schema pg_catalog version "1.1"; 

확장이 스키마가 아닌 pg_catalog에 있는지 확인하십시오.


1

을 변경 한 경우 search_path함수에 공개 스키마를 지정합니다.

public.uuid_generate_v4()

0

PGAdmin과는 별도로 유닉스 명령에서 수행하는 경우 DB를 매개 변수로 전달하는 것을 잊지 마십시오. 그렇지 않으면이 DB에서 요청을 실행할 때이 확장이 활성화되지 않습니다.

psql -d -c "EXTENSION pgcrypto 생성;"


0

# 1 정확한 스키마에 uuid-ossp 확장을 다시 설치합니다.

SET search_path TO public;
DROP EXTENSION IF EXISTS "uuid-ossp";

CREATE EXTENSION "uuid-ossp" SCHEMA public;

새로 설치하는 경우 SETDROP. @atomCode에 대한 크레딧 ( 세부 정보 )

그런 다음 오른쪽 스키마에 uuid_generate_v4 () 함수 가 표시되어야합니다 ( psql 명령 줄 프롬프트 에서 쿼리를 실행할 때 )\df .

# 2 정규화 된 이름 사용 ( schemaname.한정자 포함) :

CREATE TABLE public.my_table (
    id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.