No 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)
Como você pode ver, a uuid-ossp
extensão existe. No entanto, quando chamo a função de geração uuid_v4
, ela falha:
CREATE TABLE my_table (
id uuid DEFAULT uuid_generate_v4() NOT NULL,
name character varying(32) NOT NULL,
);
O que há de errado nisso?
postgresql
amazon-web-services
amazon-ec2
ア レ ッ ク ス
fonte
fonte
Respostas:
A extensão está disponível, mas não instalada neste banco de dados.
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
fonte
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
\c <db name>
no console do pgsqlSe a extensão já estiver lá, mas você não vir a função uuid_generate_v4 () ao executar um comando describe functions \ df, então tudo que você precisa fazer é eliminar a extensão e adicioná-la novamente para que as funções também sejam adicionadas. Aqui está a replicação do problema:
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)
O que provavelmente aconteceu é que a extensão foi originalmente adicionada ao cluster em algum ponto no passado e, em seguida, você provavelmente criou um novo banco de dados dentro desse cluster posteriormente. Se for esse o caso, o novo banco de dados estará apenas "ciente" da extensão, mas não terá as funções uuid adicionadas, o que acontece quando você adiciona a extensão. Portanto, você deve adicioná-lo novamente.
fonte
Parece que a extensão não está instalada no banco de dados específico que você precisa.
Você deve se conectar a este banco de dados específico com
Em seguida, instale a extensão neste banco de dados
CREATE EXTENSION "uuid-ossp";
fonte
Isso funcionou para mim.
create extension IF NOT EXISTS "uuid-ossp" schema pg_catalog version "1.1";
certifique-se de que a extensão deve estar em pg_catalog e não em seu esquema ...
fonte
Se você alterou o
search_path
, especifique o esquema público na função:fonte
se você fizer isso a partir do comando unix (além do PGAdmin) não se esqueça de passar o DB como um parâmetro. caso contrário, esta extensão não será habilitada ao executar solicitações neste banco de dados
psql -d -c "criar EXTENSÃO pgcrypto;"
fonte
# 1 Reinstale a extensão uuid-ossp em um esquema exato:
SET search_path TO public; DROP EXTENSION IF EXISTS "uuid-ossp"; CREATE EXTENSION "uuid-ossp" SCHEMA public;
Se esta for uma instalação nova, você pode ignorar
SET
eDROP
. Créditos para @atomCode ( detalhes )Depois disso, você verá a função uuid_generate_v4 () no esquema correto (ao executar a
\df
consulta no prompt de linha de comando do psql ) .# 2 Use nomes totalmente qualificados (com
schemaname.
qualificador):CREATE TABLE public.my_table ( id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
fonte