এক্সটেনশন বিদ্যমান তবে uuid_generate_v4 ব্যর্থ


98

অ্যামাজন এ সি 2 আরডিএস পোস্টগ্রেক্কল:

=> 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
ভবিষ্যতে, দয়া করে সর্বদা কোনও ত্রুটি বার্তার সঠিক পাঠ্যটি দেখান ।
ক্রেগ রিঞ্জার

উত্তর:


208

এক্সটেনশন উপলব্ধ তবে এই ডাটাবেসে ইনস্টল করা নেই

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

17
কমান্ডটি CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
হ'ল

7
স্পষ্টভাবে স্পষ্ট করে বলতে হবে, ডিবি নির্বাচন করতে একজন \c <db name>পি.এস.কি.এল. কনসোলে লিখতে পারেন
ElementalStorm

@ ক্রেইগ্রিঞ্জার আমি এই দস্তাবেজটি কোথায় খুঁজে পাব?
অভিষেক মানি

25

যদি এক্সটেনশানটি ইতিমধ্যে সেখানে থাকে তবে আপনি যখন ইউটিউড_জেনারেট_ভি 4 () ফাংশনটি দেখতে না পান যখন আপনি কোনও বর্ণনা-ফাংশন \ ডিএফ কমান্ড করেন তখন আপনার কেবলমাত্র এক্সটেনশনটি ড্রপ করে পুনরায় যুক্ত করতে হবে যাতে ফাংশনগুলিও যুক্ত হয়। এখানে ইস্যুটির প্রতিলিপি দেওয়া হল:

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

দেখে মনে হচ্ছে এক্সটেনশনটি আপনার প্রয়োজনীয় নির্দিষ্ট ডাটাবেসে ইনস্টল করা হয়নি is

আপনার সাথে এই নির্দিষ্ট ডাটাবেসের সাথে সংযোগ করা উচিত

 \CONNECT my_database

তারপরে এই ডাটাবেসে এক্সটেনশনটি ইনস্টল করুন

 CREATE EXTENSION "uuid-ossp";

5

এটি আমার পক্ষে কাজ করেছে।

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

আপনার স্কিমে নয় পিগ_ক্যাটালগের মাধ্যমে এক্সটেনশনটি হওয়া উচিত তা নিশ্চিত করুন ...


2

আপনি যদি পরিবর্তন করে থাকেন search_pathতবে ফাংশনে পাবলিক স্কিমা নির্দিষ্ট করুন:

public.uuid_generate_v4()

0

আপনি যদি এটি ইউনিক্স কমান্ড থেকে করেন (পিজিএডমিন বাদে) প্যারামিটার হিসাবে ডিবি পাস করতে ভুলবেন না। অন্যথায় এই ডিবিতে অনুরোধগুলি কার্যকর করার সময় এই এক্সটেনশনটি সক্ষম হবে না

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- এ ক্রেডিট ( বিশদ )

এর পরে, আপনার ডান স্কিমাতে ইউইড_জেনারেট_ভি 4 () ফাংশনটি দেখতে হবে (যখন পিএসএইচএল কমান্ড-লাইন প্রম্পটে \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.