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,
);
이것에 무슨 문제가 있습니까?
답변
확장을 사용할 수 있지만 이 데이터베이스에 설치되어 있지 않습니다 .
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
답변
확장이 이미 있지만 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 함수가 추가되지 않습니다. 따라서 다시 추가해야합니다.
답변
필요한 특정 데이터베이스에 확장이 설치되지 않은 것 같습니다.
이 특정 데이터베이스에 연결해야합니다.
\CONNECT my_database
그런 다음이 데이터베이스에 확장을 설치하십시오.
CREATE EXTENSION "uuid-ossp";
답변
이것은 나를 위해 일했습니다.
create extension IF NOT EXISTS "uuid-ossp" schema pg_catalog version "1.1";
확장이 스키마가 아닌 pg_catalog에 있는지 확인하십시오.
답변
을 변경 한 경우 search_path
함수에 공개 스키마를 지정합니다.
public.uuid_generate_v4()
답변
PGAdmin과는 별도로 유닉스 명령에서 수행하는 경우 DB를 매개 변수로 전달하는 것을 잊지 마십시오. 그렇지 않으면이 DB에서 요청을 실행할 때이 확장이 활성화되지 않습니다.
psql -d -c “EXTENSION pgcrypto 생성;”
답변
# 1 정확한 스키마에 uuid-ossp 확장을 다시 설치합니다.
SET search_path TO public;
DROP EXTENSION IF EXISTS "uuid-ossp";
CREATE EXTENSION "uuid-ossp" SCHEMA public;
새로 설치하는 경우 SET
및 DROP
. @atomCode에 대한 크레딧 ( 세부 정보 )
그런 다음 오른쪽 스키마에 uuid_generate_v4 () 함수 가 표시되어야합니다 ( psql 명령 줄 프롬프트 에서 쿼리를 실행할 때 )\df
.
# 2 정규화 된 이름 사용 ( schemaname.
한정자 포함) :
CREATE TABLE public.my_table (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,