En 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 puede ver, la uuid-ossp
extensión existe. Sin embargo, cuando llamo a la función para la generación uuid_v4
, falla:
CREATE TABLE my_table (
id uuid DEFAULT uuid_generate_v4() NOT NULL,
name character varying(32) NOT NULL,
);
¿Qué pasa con esto?
postgresql
amazon-web-services
amazon-ec2
ア レ ッ ク ス
fuente
fuente
Respuestas:
La extensión está disponible pero no instalada en esta base de datos.
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
fuente
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
\c <db name>
en la consola pgsqlSi la extensión ya está allí pero no ve la función uuid_generate_v4 () cuando ejecuta un comando describe functions \ df, entonces todo lo que necesita hacer es soltar la extensión y volver a agregarla para que las funciones también se agreguen. Aquí está la replicación del 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)
Lo que probablemente sucedió es que la extensión se agregó originalmente al clúster en algún momento en el pasado y luego probablemente creó una nueva base de datos dentro de ese clúster después. Si ese fuera el caso, entonces la nueva base de datos solo será "consciente" de la extensión, pero no tendrá las funciones uuid agregadas, lo que sucede cuando agrega la extensión. Por lo tanto, debe volver a agregarlo.
fuente
Parece que la extensión no está instalada en la base de datos particular que la necesita.
Debe conectarse a esta base de datos en particular con
Luego instale la extensión en esta base de datos
CREATE EXTENSION "uuid-ossp";
fuente
Esto funcionó para mí.
create extension IF NOT EXISTS "uuid-ossp" schema pg_catalog version "1.1";
asegúrese de que la extensión debe estar en pg_catalog y no en su esquema ...
fuente
Si ha cambiado
search_path
, especifique el esquema público en la función:fuente
si lo hace desde el comando Unix (aparte de PGAdmin) no olvide pasar la base de datos como parámetro. de lo contrario, esta extensión no se habilitará al ejecutar solicitudes en esta base de datos
psql -d -c "crea EXTENSIÓN pgcrypto;"
fuente
# 1 Vuelva a instalar la extensión uuid-ossp en un esquema exacto:
SET search_path TO public; DROP EXTENSION IF EXISTS "uuid-ossp"; CREATE EXTENSION "uuid-ossp" SCHEMA public;
Si se trata de una instalación nueva, puede omitir
SET
yDROP
. Créditos a @atomCode ( detalles )Después de esto, debería ver la función uuid_generate_v4 () en el esquema correcto (cuando se ejecuta la
\df
consulta en la línea de comandos de psql ) .# 2 Use nombres completamente calificados (con
schemaname.
calificador):CREATE TABLE public.my_table ( id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
fuente