एक्सटेंशन मौजूद है लेकिन uuid_generate_v4 विफल


99

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
भविष्य में, कृपया हमेशा किसी त्रुटि संदेश का सटीक पाठ दिखाएं ।
क्रेग रिंगर

जवाबों:


210

एक्सटेंशन उपलब्ध है, लेकिन इस डेटाबेस में स्थापित नहीं है

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

17
कमांड होना चाहिएCREATE EXTENSION IF NOT EXISTS "uuid-ossp";
बोटकोडर

7
बस स्पष्ट होने के लिए, db \c <db name>को pgsql कंसोल में लिख सकते हैं का चयन करने के लिए
ElementalStorm

@ क्रेगिंगर मैं इस डॉक्टर को कहां पा सकता हूं?
अभिषेक मणि

25

यदि एक्सटेंशन पहले से मौजूद है, लेकिन जब आप विवरण फ़ंक्शन \ 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)

संभवतः ऐसा हुआ है कि एक्सटेंशन को मूल रूप से क्लस्टर में किसी बिंदु पर जोड़ा गया था और तब आपने संभवतः उस क्लस्टर के बाद एक नया डेटाबेस बनाया था। यदि ऐसा था तो नया डेटाबेस केवल एक्सटेंशन के बारे में "जागरूक" होगा, लेकिन इसमें यूआईडी फ़ंक्शन शामिल नहीं होंगे जो कि एक्सटेंशन जोड़ने पर होता है। इसलिए आपको इसे फिर से जोड़ना होगा।


17

लगता है कि एक्सटेंशन उस विशेष डेटाबेस में स्थापित नहीं है जिसकी आपको आवश्यकता है।

आपको इस विशेष डेटाबेस से जुड़ना चाहिए

 \CONNECT my_database

फिर इस डेटाबेस में एक्सटेंशन इंस्टॉल करें

 CREATE EXTENSION "uuid-ossp";

5

इसने मेरे लिए काम किया।

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

सुनिश्चित करें कि एक्सटेंशन pg_catalog पर होना चाहिए और आपके स्कीमा में नहीं ...


2

यदि आपने इसे बदल दिया है search_path, तो फ़ंक्शन पर सार्वजनिक स्कीमा निर्दिष्ट करें:

public.uuid_generate_v4()

0

यदि आप इसे यूनिक्स कमांड (PGAdmin के अलावा) से करते हैं, तो DB को एक पैरामीटर के रूप में पास करना न भूलें। अन्यथा इस डीबी पर अनुरोध निष्पादित करते समय यह एक्सटेंशन सक्षम नहीं होगा

psql -d -c "एक्जेंशन बनाएँ pgcrypto;"


0

# 1 सटीक स्कीमा में uuid-ossp निष्कर्षण फिर से स्थापित करें:

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

CREATE EXTENSION "uuid-ossp" SCHEMA public;

इस एक नई स्थापना है, तो आप को छोड़ सकते हैं SETऔर DROP। @AtomCode ( विवरण ) को क्रेडिट

इसके बाद, आपको सही स्कीमा (जब psql कमांड-लाइन प्रॉम्प्ट में क्वेरी निष्पादित करें ) में uuid_generate_v4 () फ़ंक्शन देखना चाहिए ।\df

# 2 पूरी तरह से योग्य नाम ( schemaname.क्वालिफायर के साथ ) का उपयोग करें:

CREATE TABLE public.my_table (
    id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.