0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PostgreSQLデータ型サクッとまとめてみた

Last updated at Posted at 2025-05-25

PostgreSQL 型チートシート


数値型

サイズ 範囲 / 精度 主な用途
smallint 2 byte -32,768 ~ 32,767 小さな整数 score SMALLINT
integer (int4) 4 byte -2,147,483,648 ~ 2,147,483,647 汎用整数(最も利用) age INTEGER
bigint (int8) 8 byte -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 非常に大きい整数 visits BIGINT
serial / bigserial 4 / 8 byte 1 から上限値まで連番(integer / bigint と同じ範囲) 自動連番(PK向け) id SERIAL PRIMARY KEY
real (float4) 4 byte ±3.4 × 10³⁸(有効桁 ~6 桁) 浮動小数(丸め誤差あり) temperature REAL
double precision (float8) 8 byte ±1.7 × 10³⁰⁸(有効桁 ~15 桁) 高精度浮動小数 distance DOUBLE PRECISION
numeric(p,s) / decimal(p,s) 可変 p = 精度(全桁数)
s = スケール(小数点以下桁数)
NUMERIC(10,2) → 最大 10 桁のうち小数 2 桁
正確な数値計算(会計など) price NUMERIC(10,2)

備考

  • serial / bigserial は実体が integer / bigint+シーケンス。通常は正の連番。
  • 浮動小数 (real / double precision) は速いが誤差が出るため、金額など誤差 NG のケースでは numeric を推奨。
  • numericps を省略すると “ほぼ無制限” だが、ストレージと計算コストが増えるので必要最小限の指定がおすすめ。

文字列型

サイズ 特徴 / 制約
char(n) n byte + 1–4 byte オーバヘッド 固定長・不足分は空白で右詰め補完。n1 ~ 10⁷ まで指定可(実質 1 GB)。検索キーなど “常に桁数が決まっている” コード向け。 code CHAR(3)
varchar(n) 最大 n byte + 1–4 byte 可変長・上限 n 文字。n > 10⁷ は指定不可。空き領域を節約しつつ入力長を制限したいときに。 username VARCHAR(50)
varchar (制限なし) 実質 1 GB まで 内部的には text と同じ型。長文 OK だが “制限なし” を宣言する点に注意(バリデーションはアプリ側になる)。 note VARCHAR
text 実質 1 GB まで 完全フリーサイズ。ブログ本文や JSON ストリング等、とにかく長い文字列を入れたいときの定番。 description TEXT

PostgreSQL の文字長は バイト数 ではなく 文字数(UTF-8 コードポイント) で計算される点に注意。
1~4 byte のオーバヘッドは内部 TOAST 圧縮や長さタグに使われる。
オーバーヘッドはPostgreSQL が文字列を保存する際に使う追加バイト。


日付・時刻型

サイズ 格納範囲 主な用途
date 4 byte 4713 BC-01-01 ~ 5874897-12-31 年月日だけ。誕生日や請求日等 “日付だけ” に最適。 birthday DATE
time 8 byte 00:00:00 ~ 23:59:59.999999 時刻のみ。タイムゾーン無し。 meeting_time TIME
timestamp 8 byte 4713 BC-11-24 00:00:00 ~ 294276-12-31 23:59:59.999999 日付+時刻(ローカルタイム)。 updated_at TIMESTAMP
timestamptz 8 byte 同上(内部は UTC へ自動変換) タイムゾーン付き。常に世界共通時刻で保存し、アプリ側でローカル表記。 created_at TIMESTAMPTZ

timestamptz で “tz” は 保存値にタイムゾーンを含む というより “保存時に UTC 変換する” 意味。
夏時間切替などのバグを避けるためにも timestamptz 一択 が実務の鉄板。
4713 BC =紀元前4713年
UTCは「世界中で共通の時間基準」。UTC + 9時間が日本。


論理型

サイズ
boolean 1 byte TRUE / FALSE / NULL is_active BOOLEAN

FALSE0 などで代用する必要はなし。インデックスも張れる。


配列型

型例 サイズ 特徴 / 注意 使用例
int[] エントリ合計 + 24 byte〜 整数の配列。多次元も可(最大 6 次元 × 約 10⁹ 要素)。要素の追加・削除はクエリが複雑になりやすい。 scores INT[]
'{100, 92, 88}'
text[] 同上 文字列の配列。タグ・キーワードなど可変件数の文字列に便利。

設計TIP:更新頻度が高い場合は正規化(別テーブル化)を検討。


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?