Supabaseのデータ型チートシート
techはじめに
この記事では備忘録も兼ねてSupabaseのデータ型を表形式でまとめていきます。
Supabase は PostgreSQL をベースにしているため、PostgreSQL の型をそのまま使います。
🔢 整数型(Integer)
| 型名 | 特徴 | 使いどころ |
|---|---|---|
int2 / smallint | 2 byte・範囲 ±32,767 | ステータス、フラグなど小さな数値 |
int4 / integer | 4 byte・範囲 約±21億 | 一般的なカウンタ・ID(迷ったらコレ) |
int8 / bigint | 8 byte・範囲 約±922京 | 大量データのID、XP累計など大きな数値 |
数字 = バイト数。
int2= 2 byte、int4= 4 byte、int8= 8 byte。int6は存在しない。
通常はint4(=integer=int)を使えばOK。
🔵 浮動小数点・数値型
| 型名 | 特徴 | 使いどころ |
|---|---|---|
float4 / real | 4 byte・精度6桁相当・演算誤差あり | センサー値・座標など精度不要な小数 |
float8 / double precision | 8 byte・精度15桁相当・演算誤差あり | 科学計算など高精度な小数 |
numeric / decimal | 可変長・任意精度・誤差なし | 金額・税率など精度が重要な値 |
📝 文字列型
| 型名 | 特徴 | 使いどころ |
|---|---|---|
text | 長さ無制限・パフォーマンス良好 | 基本これを使う。本文・説明文など |
varchar(n) | 最大n文字・超過するとエラー | 入力上限を明示・強制したいとき |
char(n) | 固定長・不足分は空白パディング | ほぼ使わない |
✅ 真偽値型
| 型名 | 特徴 | 使いどころ |
|---|---|---|
boolean | true / false / null の3値 | フラグ・公開設定・完了状態など |
📅 日時型
| 型名 | 特徴 | 使いどころ |
|---|---|---|
date | 日付のみ(YYYY-MM-DD) | 誕生日・締切日など時刻不要な場合 |
time | 時刻のみ(HH:MM:SS) | 営業時間など日付不要な場合 |
timestamp | 日時・タイムゾーンなし | ローカル時刻固定で扱う場合 |
timestamptz | 日時・タイムゾーン付き | Supabaseでは基本これ。created_at など |
interval | 時間の差分を表す | 期間計算・有効期限の差分など |
🆔 UUID型
| 型名 | 特徴 | 使いどころ |
|---|---|---|
uuid | 128bit の一意識別子 | 主キーに推奨。連番推測されず安全 |
id uuid primary key default gen_random_uuid()
📦 JSON型
| 型名 | 特徴 | 使いどころ |
|---|---|---|
json | テキストとして保存・都度パース・インデックス不可 | ほぼ使わない |
jsonb | バイナリ保存・インデックス可・高速 | こちらを使う。柔軟な構造のデータ |
🗃️ 配列型
| 型名 | 特徴 | 使いどころ |
|---|---|---|
text[] / integer[] など | あらゆる型の配列をサポート | タグ・複数選択値など |
📌 整数型まとめ(混乱しがちポイント)
int2 = smallint = 2 byte = ±32,767
int4 = integer = 4 byte = ±2,147,483,647 ← 迷ったらコレ
int8 = bigint = 8 byte = ±9,223,372,036,854,775,807
🔑 よく使う組み合わせテンプレ
create table posts (
id uuid primary key default gen_random_uuid(),
user_id uuid references auth.users(id) on delete cascade,
title text not null,
body text,
tags text[],
metadata jsonb,
is_public boolean not null default false,
view_count integer not null default 0,
published_at timestamptz,
created_at timestamptz not null default now(),
updated_at timestamptz not null default now()
);
おわりに
今回はずらっとデータ型を並べてみました。
特に整数型や日時型は実際の実装でも迷った点なので、より厳密に理解することができ安心しました。
int2を超える数値を扱うことって日常的にはないですが、コンピュータの中だと普通にあるのがびっくりしますよね笑
もしよかったら他の記事も見ていってください!
