В 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,
);
Что в этом плохого?
postgresql
amazon-web-services
amazon-ec2
ア レ ッ ク ス
источник
источник
Ответы:
Расширение доступно, но не установлено в этой базе данных.
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
источник
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
\c <db name>
в консоли pgsqlЕсли расширение уже существует, но вы не видите функцию uuid_generate_v4 () при выполнении команды describe functions \ df, тогда все, что вам нужно сделать, это отбросить расширение и повторно добавить его, чтобы функции также были добавлены. Вот репликация проблемы:
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, как это происходит при добавлении расширения. Поэтому вы должны добавить его повторно.
источник
Похоже, что расширение не установлено в той базе данных, которая вам нужна.
Вы должны подключиться к этой конкретной базе данных с помощью
Затем установите расширение в эту базу данных
CREATE EXTENSION "uuid-ossp";
источник
Это сработало для меня.
create extension IF NOT EXISTS "uuid-ossp" schema pg_catalog version "1.1";
убедитесь, что расширение должно находиться в pg_catalog, а не в вашей схеме ...
источник
Если вы изменили
search_path
, укажите общедоступную схему функции:источник
если вы делаете это с помощью команды unix (кроме PGAdmin), не забудьте передать БД в качестве параметра. иначе это расширение не будет включено при выполнении запросов к этой БД
psql -d -c "создать РАСШИРЕНИЕ 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 () в правой схеме (при выполнении
\df
запроса в командной строке psql ) .# 2 Используйте полностью определенные имена (с
schemaname.
квалификатором):CREATE TABLE public.my_table ( id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
источник