A resposta de Craig Ringer está correta. Aqui está um pouco mais de informação para o Postgres 9.1 e posterior ...
A extensão está disponível?
Você só pode instalar uma extensão se ela já tiver sido criada para a instalação do Postgres (seu cluster no jargão do Postgres). Por exemplo, eu achei a extensão uuid-ossp incluída como parte do instalador do Mac OS X, gentilmente fornecido pelo EnterpriseDB.com. Qualquer uma das dezenas de extensões pode estar disponível.
Para verificar se a extensão uuid-ossp está disponível no cluster do Postgres, execute este SQL para consultar o pg_available_extensions
catálogo do sistema:
SELECT * FROM pg_available_extensions;
Instalar extensão
Para instalar essa extensão relacionada ao UUID , use o comando CREATE EXTENSION conforme visto neste SQL:
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
Cuidado: achei que os caracteres de MARCAÇÃO DE COTAÇÃO em torno do nome da extensão eram necessários, apesar da documentação em contrário.
O comitê de padrões SQL ou a equipe do Postgres escolheu um nome estranho para esse comando. Na minha opinião, eles deveriam ter escolhido algo como "INSTALAR EXTENSÃO" ou "USAR EXTENSÃO".
Verificar instalação
Você pode verificar se a extensão foi instalada com sucesso no banco de dados desejado executando este SQL para consultar o pg_extension
catálogo do sistema:
SELECT * FROM pg_extension;
UUID como valor padrão
Para obter mais informações, consulte a pergunta: Valor padrão para a coluna UUID no Postgres
O Caminho Antigo
As informações acima usam o novo recurso Extensões adicionado ao Postgres 9.1. Nas versões anteriores, tivemos que encontrar e executar um script em um arquivo .sql . O recurso Extensões foi adicionado para facilitar a instalação, negociando um pouco mais de trabalho pelo criador de uma extensão por menos trabalho por parte do usuário / consumidor da extensão. Veja minha postagem no blog para mais discussões.
Tipos de UUIDs
By the way, o código em questão chama a função uuid_generate_v4()
. Isso gera um tipo conhecido como versão 4 onde quase todos os 128 bits são gerados aleatoriamente. Embora isso seja adequado para uso limitado em um conjunto menor de linhas, se você quiser praticamente eliminar qualquer possibilidade de colisão, use outra "versão" do UUID.
Por exemplo, a versão 1 original combina o endereço MAC do computador host com a data e hora atuais e um número arbitrário, a chance de colisões é praticamente nula.
Para mais discussão, consulte minha resposta sobre a questão relacionada.