Estoy tratando de crear una identificación UUID en una tabla con PostgreSQL. Probé con:
id uuid PRIMARY KEY DEFAULT uuid_generate_v4()Pero obtengo:
ERROR: la función uuid_generate_v4() no existe SUGERENCIA: ninguna función coincide con el nombre dado y los tipos de argumento. Es posible que deba agregar conversiones de tipos explícitas.
Intenté agregar el esquema como: id uuid PRIMARY KEY DEFAULT public.uuid_generate_v4() (como se ve en un comentario aquí )
También verifiqué si la extensión está ahí ( SELECT * FROM pg_available_extensions; ), y sí, la tengo instalada en la base de datos de PostgreSQL:
Leí que si Postgres se está ejecutando en modo --single , es posible que esto no funcione, pero no sé cómo probarlo o si hay alguna forma de hacerlo.
Alguien sabe como puedo solucionar el problema? ¿O alguna otra opción? ¿Es una buena idea usar así:
SET DEFAULT uuid_in(md5(random()::text || now()::text)::cstring);Debido a que no se encuentra la función uuid_generate_v4 sugiere que no se cargue la extensión uuid-ossp
pg_available_extensions enumera las extensiones disponibles, pero no necesariamente cargadas .
para ver la lista de extensiones cargadas consulta la vistapg_extension como tal:
select * from pg_extension; Para cargar la extensión uuid-ossp , ejecute lo siguiente:
CREATE EXTENSION "uuid-ossp";nota : esto requerirá privilegios de superusuario.
Después de que la extensión uuid-ossp se cargue con éxito, debería verla en la vista pg_extension y la función uuid_generate_v4 debería estar disponible.
En mi caso, necesitaba agregar el esquema a la llamada de función de esta manera: app.uuid_generate_v4()
en lugar de esto: uuid_generate_v4()
Encontré el esquema para cada extensión ejecutando esta consulta:
SELECT pge.extname, pge.extversion, pn.nspname AS schema FROM pg_extension pge JOIN pg_catalog.pg_namespace pn ON pge.extnamespace = pn."oid" ;