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で使用できる主要な型の一覧を
備忘録としてまとめます。

SQLiteと比べて型が厳密に管理される点が大きな違いです。


1. PostgreSQLの型システムの特徴

PostgreSQLは型が厳密に管理されます。

-- TEXT型の列にINTEGERを入れるとエラー
CREATE TABLE test (name TEXT);
INSERT INTO test VALUES (42); -- エラー:integer is not text

SQLiteと異なり、宣言した型以外の値は原則として格納できません。


2. 数値型

型名 サイズ 範囲 用途
SMALLINT 2バイト -32,768〜32,767 小さな整数
INTEGER / INT 4バイト 約±21億 一般的な整数
BIGINT 8バイト 約±922京 大きな整数
SERIAL 4バイト 1〜約21億 自動採番(主キーに使う)
BIGSERIAL 8バイト 1〜約922京 大きな自動採番
DECIMAL(p,s) / NUMERIC(p,s) 可変 精度指定可能 金額・正確な小数
REAL 4バイト 6桁精度 浮動小数点
DOUBLE PRECISION 8バイト 15桁精度 高精度浮動小数点

金額計算にはNUMERICまたはDECIMALを使ってください。
REALDOUBLE PRECISIONは浮動小数点誤差が出る場合があります。


3. 文字列型

型名 内容 用途
CHAR(n) 固定長文字列(n文字・不足はスペース埋め) 固定長コード
VARCHAR(n) 可変長文字列(最大n文字) 名前・タイトル
TEXT 可変長文字列(長さ制限なし) 説明文・本文

PostgreSQLではTEXTVARCHARのパフォーマンス差はほぼありません。
制限が不要な場合はTEXTを使うのがシンプルでおすすめです。


4. 真偽値型

型名 内容
BOOLEAN TRUE / FALSE / NULL 真偽値
-- 以下はすべてTRUEとして扱われる
INSERT INTO flags VALUES (TRUE);
INSERT INTO flags VALUES ('true');
INSERT INTO flags VALUES ('yes');
INSERT INTO flags VALUES (1);

SQLiteと異なり専用のBOOLEAN型が存在します。


5. 日付・時刻型

型名 内容
DATE 日付のみ '2026-04-11'
TIME 時刻のみ '09:00:00'
TIMESTAMP 日付と時刻 '2026-04-11 09:00:00'
TIMESTAMPTZ タイムゾーン付き日時 '2026-04-11 09:00:00+09'
INTERVAL 時間の間隔 '1 day' / '2 hours'

本番環境ではTIMESTAMPTZの使用を推奨します。
タイムゾーンを意識した設計にしておくと
国際化対応やサマータイム問題を防げます。


6. バイナリ型

型名 内容
BYTEA バイナリデータ

7. PostgreSQL独自の型

SQLiteにはない型です。

型名 内容 用途
UUID 128ビットの一意識別子 分散システムのID管理
JSON JSONデータ(テキスト形式) JSONの保存
JSONB JSONデータ(バイナリ形式) JSONの高速検索
ARRAY 配列型 複数値を1列に保存
INET IPアドレス ネットワーク管理
SERIAL 自動採番整数 主キー

JSONとJSONBの違い:
JSONはテキストそのままで保存・JSONBはバイナリに変換して保存します。
検索・インデックスが必要ならJSONBを選んでください。


8. SQLiteとPostgreSQLの型比較

用途 SQLite PostgreSQL
整数 INTEGER INTEGER / BIGINT
自動採番 INTEGER PRIMARY KEY SERIAL / BIGSERIAL
文字列 TEXT TEXT / VARCHAR(n)
真偽値 INTEGER(0/1) BOOLEAN
日付 TEXT(文字列で代用) DATE
日時 TEXT(文字列で代用) TIMESTAMP / TIMESTAMPTZ
JSON なし JSON / JSONB
型の厳密さ 緩い(何でも入る) 厳密(型違いはエラー)

まとめ

ポイント 内容
型は厳密 宣言した型以外は入らない
自動採番 SERIALを使う
真偽値 BOOLEAN型が使える
日時 TIMESTAMP / TIMESTAMPTZが使える
JSON JSONBが検索に強くおすすめ
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?