OSSP uuid 関数の1つを呼び出す列を定義するときにDEFAULT
を呼び出します。 Postgresサーバーは、行が挿入されるたびに関数を自動的に呼び出します。
_CREATE TABLE tbl
(
pkey UUID NOT NULL DEFAULT uuid_generate_v1() ,
CONSTRAINT pkey_tbl PRIMARY KEY ( pkey )
)
_
すでに pgcrypto 拡張を使用している場合は、 Answer by bpieck を検討してください。
一方 Postgres すぐに使用できるstoringID(Universally Unique Identifier) ネイティブの値 128ビット 形式、生成UUID値にはプラグインが必要です。 Postgresでは、プラグインはextension
として知られています。
拡張機能をインストールするには、 _CREATE EXTENSION
_ を呼び出します。再インストールを回避するには、_IF NOT EXISTS
_を追加します。詳細については 私のブログ投稿 を参照するか、 StackOverflowのこのページ を参照してください。
必要な拡張機能は、UUIDを操作するためにCで構築されたオープンソースライブラリ OSSP uuid です。 Postgresのこのライブラリのビルド は、 グラフィカルインストーラーが提供されるEnterprise DB などのPostgresのインストールにバンドルされているか、クラウドプロバイダーに含まれていることが多い Amazon RDS for PostgreSQL など。
_CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
_
さまざまな種類のUUID値を生成するために提供されている複数のコマンドのリストを確認するには、 extension’s doc を参照してください。コンピューターの MACアドレス に現在の日時と小さなランダムな値を加えたUUIDの元のバージョンを取得するには、 uuid_generate_v1()
を呼び出します。
_SELECT uuid_generate_v1();
_
672124b6-9894-11e5-be38-001d42e813fe
このテーマのその後のバリエーションは、代替の種類のUUIDのために開発されました。セキュリティやプライバシーの問題などのために、サーバーの実際のMACアドレスを記録したくない場合があります。 Postgres拡張機能は、5種類のUUIDに加えて、「nil」のUUID _00000000-0000-0000-0000-000000000000
_を生成します。
このメソッド呼び出しを自動的に実行して、新しく挿入された行のデフォルト値を生成できます。列を定義するときは、次を指定します。
DEFAULT uuid_generate_v1()
次のテーブル定義の例で使用されているコマンドを参照してください。
_CREATE TABLE public.pet_
(
species_ text NOT NULL,
name_ text NOT NULL,
date_of_birth_ text NOT NULL,
uuid_ uuid NOT NULL DEFAULT uuid_generate_v1(), -- <====
CONSTRAINT pet_pkey_ PRIMARY KEY (uuid_)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.pet_
OWNER TO postgres;
_
uuid-ossp プラグインは さまざまなバージョンのUUID を生成できます。
uuid_generate_v1()
uuid_generate_v1mc()
uuid_generate_v3( namespace uuid, name text )
uuid_generate_v4()
uuid_generate_v5( namespace uuid, name text )
uuid_nil()
00000000-0000-0000-0000-000000000000
_。不明なUUID値のフラグとして使用されます。 nil UUID として知られています。タイプを比較するには、質問を参照してください 使用するUUIDバージョンは?
バージョン3および5に興味がある場合は、この質問 Generating v5 UUID。What is name and namespace? を参照してください。
詳細については、同様の質問への my Answer および私のブログ投稿 JDBCからPostgres へのUUID値を参照してください。
バジルの非常に詳細な回答へのほんの少しの追加:
現在ほとんどが pgcrypto を使用しているため、uuid_generate_v1()
の代わりに gen_random_uuid()
を使用できます バージョン4 UUID 値の場合。
まず、Postgresでpgcryptoを有効にします。
_CREATE EXTENSION "pgcrypto";
_
列のDEFAULTをDEFAULT gen_random_uuid()
に設定するだけです