Author

Web系ソフトウェアエンジニアを志望
開発記録や個人的な技術に対する思いを綴ります

FOCUS個人開発/設計
OSArch Linux+Omarchy
STACKTypeScript・Next.js
STATUS学習中 → 就活中

Supabaseのデータ型チートシート

tech

はじめに

この記事では備忘録も兼ねてSupabaseのデータ型を表形式でまとめていきます。

Supabase は PostgreSQL をベースにしているため、PostgreSQL の型をそのまま使います。


🔢 整数型(Integer)

型名特徴使いどころ
int2 / smallint2 byte・範囲 ±32,767ステータス、フラグなど小さな数値
int4 / integer4 byte・範囲 約±21億一般的なカウンタ・ID(迷ったらコレ)
int8 / bigint8 byte・範囲 約±922京大量データのID、XP累計など大きな数値

数字 = バイト数int2 = 2 byte、int4 = 4 byte、int8 = 8 byte。int6 は存在しない。
通常は int4(= integer = int)を使えばOK。


🔵 浮動小数点・数値型

型名特徴使いどころ
float4 / real4 byte・精度6桁相当・演算誤差ありセンサー値・座標など精度不要な小数
float8 / double precision8 byte・精度15桁相当・演算誤差あり科学計算など高精度な小数
numeric / decimal可変長・任意精度・誤差なし金額・税率など精度が重要な値

📝 文字列型

型名特徴使いどころ
text長さ無制限・パフォーマンス良好基本これを使う。本文・説明文など
varchar(n)最大n文字・超過するとエラー入力上限を明示・強制したいとき
char(n)固定長・不足分は空白パディングほぼ使わない

✅ 真偽値型

型名特徴使いどころ
booleantrue / false / null の3値フラグ・公開設定・完了状態など

📅 日時型

型名特徴使いどころ
date日付のみ(YYYY-MM-DD)誕生日・締切日など時刻不要な場合
time時刻のみ(HH:MM:SS)営業時間など日付不要な場合
timestamp日時・タイムゾーンなしローカル時刻固定で扱う場合
timestamptz日時・タイムゾーン付きSupabaseでは基本これcreated_at など
interval時間の差分を表す期間計算・有効期限の差分など

🆔 UUID型

型名特徴使いどころ
uuid128bit の一意識別子主キーに推奨。連番推測されず安全
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を超える数値を扱うことって日常的にはないですが、コンピュータの中だと普通にあるのがびっくりしますよね笑

もしよかったら他の記事も見ていってください!