uuid_generate_v4 utils programmingerror postgres permission ossp función extension existe create postgresql amazon-web-services amazon-ec2

postgresql - utils - postgres uuid_generate_v4



La extensión existe pero uuid_generate_v4 falla (4)

La extensión está disponible pero no está instalada en esta base de datos.

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

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 puedes ver, la extensión uuid-ossp 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?


Parece que la extensión no está instalada en la base de datos en particular que la necesita.

Debe conectarse a esta base de datos en particular con

/CONNECT my_database

Luego instale la extensión en esta base de datos

CREATE EXTENSION "uuid-ossp";


Si la extensión ya está allí pero no ve la función uuid_generate_v4 () cuando ejecuta un comando describe functions / df , todo lo que necesita hacer es quitar la extensión y volver a agregarla para que también se agreguen las funciones. 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. Si ese fue el caso, entonces la nueva base de datos solo estará "al tanto" de la extensión, pero no tendrá las funciones uuid agregadas, lo que sucede cuando se agrega la extensión. Por lo tanto debes re-agregarlo.


Si lo hace desde el comando Unix (aparte de PGAdmin), no olvide pasar el DB como parámetro. de lo contrario, esta extensión no se habilitará cuando se ejecuten solicitudes en este DB

psql -d -c "crear EXTENSION pgcrypto;"