一意な識別子の生成は、データベースアプリケーションでよくある要件です。PostgreSQL では、UUID(汎用一意識別子)データ型を使うことで簡単にこれを実現できます。この記事では、PostgreSQL で UUID を生成する方法、UUID を使う理由と使うべき場面を解説し、コード例と実行結果を紹介します。
UUID とは?
UUID は Universally Unique Identifier(汎用一意識別子)の略で、コンピューターシステム内の情報を一意に識別するための 128 ビットの数値です。UUID を使う主な利点は、調整なしで異なるプラットフォームやデータベース間で一意なキーを提供できることです。
UUID を使う理由
- システム間での一意性:従来の連番 ID とは異なり、UUID は異なるシステムでそれぞれ独立して生成できます。
- 推測が困難:UUID は連番ではないため、予測されにくくなります。
- グローバルに一意:グローバルな一意性が保証されるため、データセットを統合する際の ID の衝突を防げます。
PostgreSQL で UUID を生成する
PostgreSQL には UUID のサポートが組み込まれているため簡単に生成できますが、追加の拡張機能を有効にする必要があります。
ステップ 1:uuid-ossp 拡張機能を有効にする
uuid-ossp 拡張機能は、UUID を生成する関数を提供します。データベースでこの拡張機能を有効にする必要があります。
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
ステップ 2:uuid_generate_v4() を使う
ランダムな UUID の生成に最もよく使われる関数は uuid_generate_v4() です。使い方は次のとおりです:
SELECT uuid_generate_v4() as generated_uuid;
実行結果:
generated_uuid
--------------------------------------
550e8400-e29b-41d4-a716-446655440000
関数を実行するたびに、新しい一意な UUID が返されます。
ステップ 3:テーブルで UUID を使う
UUID はテーブルの主キーや一意識別子として使用できます。カラムの型を UUID に設定し、uuid_generate_v4() 関数でデフォルト値を指定するのがおすすめです。
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
username VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL
);
データの挿入:
新しいレコードを挿入すると、PostgreSQL が自動的に UUID を生成してくれます。
INSERT INTO users (username, email) VALUES ('johndoe', 'john@example.com');
SELECT id, username, email FROM users;
実行結果:
id | username | email
-----------------------------------+----------+-------------------
8df00d7f-6d5d-45e8-bd9c-8c5f29e6e0a7 | johndoe | john@example.com
その他の UUID 生成方法
uuid_generate_v1()
現在のタイムスタンプと MAC アドレスに基づいて UUID を生成します。決定論的で安全性は低いものの、場面によっては便利です。
SELECT uuid_generate_v1() as generated_uuid;
実行結果:
generated_uuid
--------------------------------------
6a7fede0-e1e3-11ed-b5ea-0242ac120002
uuid_generate_v1mc()
uuid_generate_v1() と似ていますが、MAC アドレスを指定できます。
uuid_generate_v3(namespace UUID, name TEXT)
名前空間と名前に基づき、MD5 ハッシュを使ってバージョン 3 の UUID を生成します。
uuid_generate_v5(namespace UUID, name TEXT)
uuid_generate_v3() と似ていますが、SHA-1 ハッシュを使ってバージョン 5 の UUID を生成します。
まとめ
PostgreSQL の UUID 機能は、データベースアプリケーションで一意な識別子を生成するための堅牢で柔軟な方法を提供します。UUID を活用すれば、ID が一意で予測不可能であり、異なるシステム間でも一貫していることを保証できます。新しいアプリケーションを作成する場合でも既存のアプリケーションを移行する場合でも、UUID は ID 生成のモダンなアプローチです。
uuid-ossp 拡張機能とその多様な関数により、PostgreSQL ではニーズに合った UUID の種類を簡単に選べます。今日からデータベースで UUID を使い始めて、グローバルな一意性のメリットを活かしましょう。
Beekeeper Studioは無料のオープンソースのデータベースGUIです
これまで使った中で最高のSQLクエリ&エディタツールです。データベースの管理に必要なものがすべて揃っています。 - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studioは高速で直感的、そして使いやすいツールです。多数のデータベースに対応し、Windows、Mac、Linuxで快適に動作します。
Beekeeper Studio 利用者の声
「Beekeeper Studio は私の古い SQL ワークフローを完全に置き換えてくれました。高速で直感的で、データベース作業がまた楽しくなりました。」
「多くのデータベース GUI を試してきましたが、Beekeeper は機能とシンプルさのバランスが絶妙です。とにかくちゃんと動きます。」