2010-09-30 26 views
5

Estoy ejecutando PostgreSQL 8.4.4 con Ubuntu 10.04.Cómo generar uuid con PostgreSQL 8.4.4 en Ubuntu 10.04?

Estoy tratando de generar uuid pero no puedo encontrar la forma de hacerlo.

tengo el UUID-ossp.sql en /usr/share/postgresql/8.4/contrib/uuid-ossp.sql

Cuando intento esto es lo que me sale:

postgres=# SELECT uuid_generate_v1(); 
ERROR: function uuid_generate_v1() does not exist 
LINE 1: SELECT uuid_generate_v1(); 
      ^
HINT: No function matches the given name and argument types. You might need to add explicit type casts. 

Alguna idea?

Respuesta

12

Las cosas en contrib no se ejecutan automáticamente. Tienes que ejecutarlo tú mismo para instalar las funciones. No sé sobre la versión 8.4, pero en la versión 8.3 parece que solo la instala por base de datos, así que abra la base de datos que está usando en psql y emita el comando \i /usr/share/postgresql/8.4/contrib/uuid-ossp.sql

+0

Gracias. Funcionó. Bueno saber ! – Spredzy

+0

Sí, es por base de datos. Puede instalar todo en la base de datos template1 para asegurarse de que cada base de datos nueva que utiliza esta base de datos como plantilla (este es el valor predeterminado), se crea incluyendo todos los módulos contrib. –

+0

Para las versiones actuales de Postgresql (9.0+, creo), los módulos contrib se empaquetan como extensiones. Las extensiones son ordenadas porque pueden ser versionadas, espaciadas y desinstaladas. Por ejemplo, puede instalar las funciones uuid en el esquema "uuid" utilizando el siguiente comando: "create extension uuid-ossp schema uuid". Luego accedería a las funciones como "uuid.uuid_generate_v4()". –

1

Vi esto en mi PostgreSQL viaja. Requiere el módulo pgcrypto contrib.

CREATE OR REPLACE FUNCTION generate_uuid() RETURNS UUID AS 
$$ 
SELECT ENCODE(GEN_RANDOM_BYTES(16), 'hex')::UUID 
$$ LANGUAGE SQL IMMUTABLE; 
+1

para aquellos de nosotros en la parte posterior de la clase, para obtener cosas realmente instaladas en/contrib haz un sudo apt-get install postgresql-contrib. @paul gracias. –

+5

No debe declarar la función como 'IMMUTABLE' porque no desea tener lecturas en caché en lugar de evaluaciones de funciones. Declare su función como 'VOLATILE' para asegurarse de que la función se ejecute cada vez que se invoca. Consulte http://www.postgresql.org/docs/8.3/interactive/xfunc-volatility.html para obtener más explicaciones. –

+0

Lo consigo cuando ejecuto esta función: ERROR: el valor duplicado de la clave viola la restricción única "relation_pkey" DETALLE: La clave (id) = (5a0cd072-6463-2cb0-9de9-42aabb85f270) ya existe. Sin embargo, cambiar a VOLÁTIL como se mencionó anteriormente resuelve el problema. –

Cuestiones relacionadas