Di 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)
Seperti yang Anda lihat, uuid-ossp
ekstensi memang ada. Namun, ketika saya memanggil fungsi untuk pembuatan uuid_v4
, gagal:
CREATE TABLE my_table (
id uuid DEFAULT uuid_generate_v4() NOT NULL,
name character varying(32) NOT NULL,
);
Ada apa dengan ini?
postgresql
amazon-web-services
amazon-ec2
ア レ ッ ク ス
sumber
sumber
Jawaban:
Ekstensi tersedia tetapi tidak dipasang di database ini.
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
sumber
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
\c <db name>
di konsol pgsqlJika ekstensi sudah ada tetapi Anda tidak melihat fungsi uuid_generate_v4 () saat Anda melakukan perintah deskripsikan fungsi \ df maka yang perlu Anda lakukan hanyalah melepaskan ekstensi dan menambahkannya kembali sehingga fungsinya juga ditambahkan. Berikut adalah replikasi masalah:
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)
Apa yang mungkin terjadi adalah bahwa ekstensi awalnya ditambahkan ke cluster di beberapa titik di masa lalu dan kemudian Anda mungkin membuat database baru di dalam cluster itu sesudahnya. Jika itu yang terjadi maka database baru hanya akan "mengetahui" ekstensi tetapi tidak akan memiliki fungsi uuid yang ditambahkan yang terjadi saat Anda menambahkan ekstensi. Karena itu Anda harus menambahkannya kembali.
sumber
Sepertinya ekstensi tidak dipasang di database tertentu yang Anda butuhkan.
Anda harus terhubung ke database khusus ini dengan
Kemudian instal ekstensi di database ini
CREATE EXTENSION "uuid-ossp";
sumber
Ini berhasil untuk saya.
create extension IF NOT EXISTS "uuid-ossp" schema pg_catalog version "1.1";
pastikan ekstensi harus di pg_catalog dan bukan di skema Anda ...
sumber
Jika Anda telah mengubah
search_path
, tentukan skema publik pada fungsi tersebut:sumber
jika Anda melakukannya dari perintah unix (selain dari PGAdmin) jangan lupa untuk mengirimkan DB sebagai parameter. jika tidak, ekstensi ini tidak akan diaktifkan saat menjalankan permintaan di DB ini
psql -d -c "buat EKSTENSI pgcrypto;"
sumber
# 1 Instal ulang ekstensi uuid-ossp dalam skema yang tepat:
SET search_path TO public; DROP EXTENSION IF EXISTS "uuid-ossp"; CREATE EXTENSION "uuid-ossp" SCHEMA public;
Jika ini adalah instalasi baru, Anda dapat melewati
SET
danDROP
. Kredit untuk @atomCode ( detail )Setelah ini, Anda akan melihat fungsi uuid_generate_v4 () di skema yang benar (saat menjalankan
\df
kueri di prompt baris perintah psql ) .# 2 Gunakan nama yang sepenuhnya memenuhi syarat (dengan
schemaname.
kualifikasi):CREATE TABLE public.my_table ( id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
sumber