🔒

Supabase UUID

2024/05/25に公開

Tips💡

https://supabase.com/docs/guides/database/extensions/uuid-ossp?queryGroups=database-method&database-method=sql

概要
UUID は「Universally Unique Identifier (ユニバーサルユニーク識別子)」であり、実用上は一意です。
このため、主キーとして特に適しています。GUID (Globally Unique Identifier (グローバルユニーク識別子)) と呼ばれることもあります。

拡張機能を有効にする

-- Example: enable the "uuid-ossp" extension
create extension "uuid-ossp" with schema extensions;

-- Example: disable the "uuid-ossp" extension
drop extension if exists "uuid-ossp";

SQL コードは拡張機能の作成ですが、これは「拡張機能の有効化」と同等です。
拡張機能を無効にするには、拡張機能の削除を呼び出します。
パブリック スキーマをクリーンな状態に保つために、拡張機能を別のスキーマ (拡張機能など) 内に作成することをお勧めします。

注:
現在、uuid-ossp 拡張機能はデフォルトで有効になっており、無効にすることはできません。

The uuid type

拡張機能が有効になると、uuid タイプにアクセスできるようになります。

uuid_generate_v1()
コンピュータの MAC アドレス、現在のタイムスタンプ、およびランダムな値の組み合わせに基づいて UUID 値を作成します。

uuid_generate_v4()

乱数のみに基づいて UUID 値を作成します。Postgres の組み込み gen_random_uuid() 関数を使用して UUIDv4 を生成することもできます。

Examples#
Within a query

select uuid_generate_v4();

As a primary key#
Automatically create a unique, random ID in a table:

create table contacts (
  id uuid default uuid_generate_v4(),
  first_name text,
  last_name text,
  primary key (id)
);

認証のIDを使う場合

references auth.users not null primary key,を使います。

-- Create a table for public profiles
create table profiles (
  id uuid references auth.users not null primary key,
  updated_at timestamp with time zone,
  username text unique,
  full_name text,
  avatar_url text,
  website text,

  constraint username_length check (char_length(username) >= 3)
);

こちらのサイトが参考になりそうです。
https://supabase.com/docs/guides/auth/managing-user-data

Accessing user data via API
セキュリティ上の理由から、Auth スキーマは自動生成された API では公開されません。API 経由でユーザー データにアクセスする場合は、パブリック スキーマに独自のユーザー テーブルを作成できます。

行レベル セキュリティを有効にして、テーブルを保護するようにしてください。データの整合性を確保するには、auth.users テーブルを参照してください。参照で on delete cascade を指定します。たとえば、public.profiles テーブルは次のようになります。

create table public.profiles (
  id uuid not null references auth.users on delete cascade,
  first_name text,
  last_name text,

  primary key (id)
);

alter table public.profiles enable row level security;

最後に

今回は、UUIDについて調べてみた。どうやらいつでも誰でも作れて往復しないIDらしい?

UUID は「Universally Unique Identifier (ユニバーサルユニーク識別子)」であり、実用上は一意です。
このため、主キーとして特に適しています。

https://ja.wikipedia.org/wiki/UUID
https://wa3.i-3-i.info/word13163.html
https://www.postgresql.jp/document/8.3/html/datatype-uuid.html

Discussion