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