Ответ на Крейга Рингера правильно. Вот немного больше информации для Postgres 9.1 и позже ...
Доступно ли расширение?
Вы можете установить расширение только в том случае, если оно уже было создано для вашей установки Postgres (ваш кластер в Postgres lingo). Например, я обнаружил расширение uuid-ossp, включенное как часть установщика для Mac OS X, любезно предоставленное EnterpriseDB.com. Может быть доступно любое из нескольких десятков расширений .
Чтобы узнать, доступно ли расширение uuid-ossp в вашем кластере Postgres, запустите этот SQL, чтобы запросить pg_available_extensions
системный каталог:
SELECT * FROM pg_available_extensions;
Установить расширение
Чтобы установить это расширение, связанное с UUID , используйте команду CREATE EXTENSION, как показано в этом SQL:
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
Осторожно: я обнаружил, что символы QUOTATION MARK вокруг имени расширения требуются, несмотря на обратное в документации.
Комитет по стандартам SQL или команда Postgres выбрали для этой команды нечетное имя. На мой взгляд, они должны были выбрать что-то вроде «INSTALL EXTENSION» или «USE EXTENSION».
Проверить установку
Вы можете убедиться, что расширение было успешно установлено в нужной базе данных, запустив этот SQL для запроса pg_extension
системного каталога:
SELECT * FROM pg_extension;
UUID в качестве значения по умолчанию
Для получения дополнительной информации см. Вопрос: Значение по умолчанию для столбца UUID в Postgres.
По старому
Приведенная выше информация использует новую функцию расширений, добавленную в Postgres 9.1. В предыдущих версиях мы должны были найти и запустить скрипт в файле .sql . Функция «Расширения» была добавлена, чтобы упростить установку, торгуя немного больше работы для создателя расширения за меньшую работу со стороны пользователя / потребителя расширения. Смотрите мой блог для дальнейшего обсуждения.
Типы UUID
Кстати, код в вопросе вызывает функцию uuid_generate_v4()
. Это генерирует тип, известный как Версия 4, где почти все из 128 битов генерируются случайным образом. Хотя это подходит для ограниченного использования на меньшем наборе строк, если вы хотите практически исключить любую возможность столкновения, используйте другую «версию» UUID.
Например, оригинальная версия 1 сочетает в себе MAC-адрес хост-компьютера с текущей датой-временем и произвольным числом, вероятность коллизий практически равна нулю.
Для получения дополнительной информации см. Мой ответ на соответствующий вопрос.