La respuesta de Craig Ringer es correcta. Aquí hay un poco más de información para Postgres 9.1 y posterior ...
¿Está disponible la extensión?
Solo puede instalar una extensión si ya se ha creado para su instalación de Postgres (su clúster en la jerga de Postgres). Por ejemplo, encontré la extensión uuid-ossp incluida como parte del instalador para Mac OS X amablemente proporcionado por EnterpriseDB.com. Cualquiera de unas pocas docenas de extensiones pueden estar disponibles.
Para ver si la extensión uuid-ossp está disponible en su clúster de Postgres, ejecute este SQL para consultar el pg_available_extensions
catálogo del sistema:
SELECT * FROM pg_available_extensions;
Instalar extensión
Para instalar esa extensión relacionada con UUID , use el comando CREATE EXTENSION como se ve en este SQL:
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
Cuidado: encontré que los caracteres de MARCA DE COTIZACIÓN alrededor del nombre de la extensión son obligatorios, a pesar de la documentación que indique lo contrario.
El comité de estándares SQL o el equipo de Postgres eligieron un nombre extraño para ese comando. En mi opinión, deberían haber elegido algo como "INSTALAR EXTENSIÓN" o "USAR EXTENSIÓN".
Verificar instalación
Puede verificar que la extensión se instaló correctamente en la base de datos deseada ejecutando este SQL para consultar el pg_extension
catálogo del sistema:
SELECT * FROM pg_extension;
UUID como valor predeterminado
Para obtener más información, consulte la pregunta: valor predeterminado para la columna UUID en Postgres
El viejo camino
La información anterior utiliza la nueva función Extensiones agregada a Postgres 9.1. En versiones anteriores, teníamos que buscar y ejecutar un script en un archivo .sql . Se agregó la función Extensiones para facilitar la instalación, intercambiando un poco más de trabajo para el creador de una extensión por menos trabajo por parte del usuario / consumidor de la extensión. Vea mi publicación de blog para más discusión.
Tipos de UUID
Por cierto, el código en la Pregunta llama a la función uuid_generate_v4()
. Esto genera un tipo conocido como Versión 4 donde casi todos los 128 bits se generan aleatoriamente. Si bien esto está bien para un uso limitado en un conjunto más pequeño de filas, si desea eliminar virtualmente cualquier posibilidad de colisión, use otra "versión" de UUID.
Por ejemplo, la versión original 1 combina la dirección MAC de la computadora host con la fecha y hora actual y un número arbitrario, la posibilidad de colisiones es prácticamente nula.
Para más discusión, vea mi respuesta en la pregunta relacionada.