El réponse de Craig Ringer est correcte. Voici un peu plus d'informations pour Postgres 9.1 et plus
L'extension est-elle disponible ?
Vous ne pouvez installer une extension que si elle a déjà été construite pour votre installation Postgres (votre fichier cluster dans le jargon de Postgres). Par exemple, j'ai trouvé le uuid-ossp inclus dans le programme d'installation pour Mac OS X aimablement fourni par par EnterpriseDB.com. L'un des quelques dizaines d'extensions peuvent être disponibles.
Pour voir si le uuid-ossp est disponible dans votre cluster Postgres, exécutez ce SQL pour interroger l'extension pg_available_extensions
catalogue du système :
SELECT * FROM pg_available_extensions;
Installer l'extension
Pour installer ce UUID -utilisez l'option CRÉER UNE EXTENSION comme on le voit dans ce SQL :
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
Attention : J'ai trouvé que les caractères de la marque de citation autour du nom de l'extension étaient nécessaires, malgré une documentation contraire.
Le comité des normes SQL ou l'équipe Postgres a choisi un nom étrange pour cette commande. À mon avis, ils auraient dû choisir quelque chose comme "INSTALL EXTENSION" ou "USE EXTENSION".
Vérifier l'installation
Vous pouvez vérifier que l'extension a été installée avec succès dans la base de données souhaitée en exécutant ce SQL pour interroger la base de données de l'extension. pg_extension
catalogue du système :
SELECT * FROM pg_extension;
UUID comme valeur par défaut
Pour plus d'informations, voir la Question : Valeur par défaut pour la colonne UUID dans Postgres
L'ancienne méthode
L'information ci-dessus utilise la nouvelle Extensions fonctionnalité ajouté à Postgres 9.1. Dans les versions précédentes, nous devions trouver et exécuter un script dans un fichier .sql fichier. La fonction Extensions a été ajoutée pour faciliter l'installation, en échangeant un peu plus de travail pour l'équipe de l créateur d'une extension pour moins de travail de la part de l'utilisateur/consommateur de l'extension. Voir mon article de blog pour plus de discussion.
Types d'UUIDs
D'ailleurs, le code dans la Question appelle la fonction uuid_generate_v4()
. Cela génère un type connu sous le nom de Version 4 où presque tous les 128 bits sont générés de façon aléatoire. Bien que cela convienne à une utilisation limitée à un petit nombre de lignes, si vous voulez éliminer pratiquement toute possibilité de collision, utilisez une autre "version" de l'UUID.
Par exemple, l'original Version 1 combine le Adresse MAC de l'ordinateur hôte avec la date et l'heure actuelles et un nombre arbitraire, les chances de collisions sont pratiquement nulles.
Pour plus de détails, voir ma réponse sur les questions connexes.
13 votes
Postgres supporte nativement UUID comme un type de données, même capable d'être indexé et utilisé comme clé primaire. Mais pour générer une valeur UUID, par exemple pour établir une valeur par défaut pour une colonne, vous avez besoin d'une extension Postgres (un plugin). De nombreux builds (distributions) de Postgres incluent une telle extension mais ne l'activent pas. Voir la page réponse correcte de Craig Ringer pour apprendre comment l'activer.
2 votes
Si vous avez installé uuid-ossp et que vous obtenez toujours cette erreur, essayez de préfixer la fonction avec le nom de votre schéma, par exemple.
select dbo.uuid_generate_v4()