Supabase UUID
Tips💡
概要
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)
);
こちらのサイトが参考になりそうです。
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 (ユニバーサルユニーク識別子)」であり、実用上は一意です。
このため、主キーとして特に適しています。
Discussion