クレイグ・リンガーの答えは正しいです。Postgres 9.1以降の情報が少しあります…
拡張機能は利用できますか?
拡張機能は、Postgresインストール用にすでにビルドされている場合(Postgres lingoのクラスター)にのみインストールできます。たとえば、提供されたMac OS Xのインストーラーの一部として含まれているuuid-ossp拡張機能を見つけました EnterpriseDB.com。数十の拡張機能のいずれかが利用できる場合があります。
Postgresクラスターでuuid-ossp拡張が利用可能かどうかを確認するには、このSQLを実行してpg_available_extensions
システムカタログ。
SELECT * FROM pg_available_extensions;
拡張機能をインストール
そのUUID関連の拡張機能をインストールするには、次のSQLに示されているように、CREATE EXTENSIONコマンドを使用します。
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
注意してください:反対の文書にもかかわらず、拡張名の前後のQUOTATION MARK文字が必要であることがわかりました。
SQL標準委員会またはPostgresチームは、そのコマンドに奇妙な名前を選択しました。私の考えでは、彼らは「INSTALL EXTENSION」や「USE EXTENSION」のようなものを選んだはずです。
インストールの確認
このSQLを実行してpg_extension
システムカタログを照会することにより、拡張機能が目的のデータベースに正常にインストールされたことを確認できます。
SELECT * FROM pg_extension;
デフォルト値としてのUUID
詳細については、質問を参照してください: PostgresのUUID列のデフォルト値を
古い方法
上記の情報は、Postgres 9.1に追加された新しい拡張機能を使用しています。以前のバージョンでは、.sqlファイル内のスクリプトを見つけて実行する必要がありました。拡張機能は、インストールを簡単にするために追加されました。拡張機能のユーザー/コンシューマー側の作業を減らすために、拡張機能の作成者の作業を少し増やします。私を見てブログ投稿を。
UUIDのタイプ
ちなみに、質問のコードは関数を呼び出しますuuid_generate_v4()
。これにより、バージョン4と呼ばれるタイプが生成されます、128ビットのほぼすべてがランダムに生成されます。これは、行の小さなセットでの限定的な使用には問題ありませんが、衝突の可能性を事実上排除したい場合は、UUIDの別の「バージョン」を使用します。
たとえば、元のバージョン1では、ホストコンピューターのMACアドレスと現在の日時および任意の数値を組み合わせているため、衝突の可能性はほとんどありません。
詳細については、関連する質問に対する私の回答を参照してください。