확장이 있지만 uuid_generate_v4가 실패함
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";
확장자가 이미 있지만 함수 설명 \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";
1단계: uuid-osspention을 정확한 스키마에 다시 설치합니다.
새로 설치한 경우 건너뛸 수 있습니다.SET
그리고.DROP
@atomCode에 대한 크레딧(상세 정보)
SET search_path TO public;
DROP EXTENSION IF EXISTS "uuid-ossp";
CREATE EXTENSION "uuid-ossp" SCHEMA public;
이후 오른쪽 스키마에 uuid_generate_v4() 함수가 표시됩니다(psql 명령줄 프롬프트에서 쿼리를 실행할 때).
2단계: 정규화된 이름 사용(와 함께)schemaname.
한정자):
예:
CREATE TABLE public.my_table (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
변경한 경우search_path
을 지정합니다.public
함수 호출의 스키마:
public.uuid_generate_v4()
이것은 저에게 효과가 있었습니다.
create extension IF NOT EXISTS "uuid-ossp" schema pg_catalog version "1.1";
확장자가 스키마에 있지 않고 pg_message에 있는지 확인합니다.
스크립트 시작 부분에 이 코드를 추가하기만 하면 됩니다.
DROP EXTENSION IF EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
어쩌면 제가 마주하고 있던 것과 같았을지도 모릅니다.그uuid_generate_v4
에서 왔습니다.public
스키마를 사용하여 특정 스키마에서 실행하려고 했기 때문에 수정하기 위해 다음 작업을 수행했습니다.
SET search_path TO specific_schema;
INSERTO INTO my_table VALUES public.uuid_generate_v4();
함수가 실행 중인 스키마를 확인할 수 있습니다.
\df uuid_generate_v4
또는
SELECT n.nspname, p.probin, p.proname
FROM
pg_proc p
LEFT JOIN pg_namespace n ON p.pronamespace = n.oid
WHERE p.proname like 'uuid_generate_v4';
다음과 같이 uuid-osp의 확장과 관련된 정보를 확인할 수 있습니다.
SELECT * FROM pg_extension WHERE extname LIKE 'uuid-ossp';
아직 없는 확장 사례를 추가할 수 있습니다.
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
(PGAdmin과는 별도로) unix 명령에서 수행하는 경우 DB를 매개 변수로 전달하는 것을 잊지 마십시오.그렇지 않으면 이 DB에서 요청을 실행할 때 이 확장이 활성화되지 않습니다.
psql -d -c "확장 pgcrypto 생성"
제 경우에는 3단계였습니다.데이터베이스를 만들고 데이터베이스에 연결한 후 확장을 만듭니다.중요한 단계는 두 번째 단계인 "데이터베이스에 연결"이며, ";"가 없는 줄은 SQL 문장이 아닌 명령임을 알 수 있습니다.
CREATE DATABASE database_name_here;
\connect database_name_here
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
언급URL : https://stackoverflow.com/questions/22446478/extension-exists-but-uuid-generate-v4-fails
'programing' 카테고리의 다른 글
모델의 일부가 아닌 사용자 정의 양식 필드 추가(장고) (0) | 2023.05.27 |
---|---|
package.json에서 "private" 속성의 목적은 무엇입니까? (0) | 2023.05.27 |
WPF 제목 표시줄 배경색 변경 (0) | 2023.05.27 |
null 가능한 유형 및 3진수 연산자: '? 10: null'이 금지된 이유는 무엇입니까? (0) | 2023.05.27 |
C++에서 배열의 모든 요소를 하나의 기본값으로 초기화하시겠습니까? (0) | 2023.05.22 |