PostgreSQLのJSON・JSONBデータ型を完全解説|初心者でもわかるテーブル定義とデータ型の基礎
生徒
「PostgreSQLを勉強していたら、JSONとかJSONBっていうデータ型が出てきました。普通の文字と何が違うんですか?」
先生
「JSONは、データをまとめて保存できる形式です。紙のメモを束ねてクリアファイルに入れるようなイメージですね。」
生徒
「パソコンもSQLもほとんど分からないんですが、使いこなせますか?」
先生
「大丈夫です。まずは“箱に入れて保存する”感覚から、JSONとJSONBの違いや使いどころを説明していきます。」
1. SQLとは何か?
SQLは、データベースという「情報をたくさん保存する箱」に対して指示を出すための言語です。表の形で保存されているデータを、見たり、追加したり、書き換えたりするために使います。
PostgreSQLでは、数値や文字だけでなく、少し複雑なデータを扱うための特別なデータ型も用意されています。その代表例がJSONとJSONBです。
2. JSONとは何かを超かんたんに理解しよう
JSONは、「データの書き方のルール」です。名前と値をセットにして、ひとまとめに表現できます。
例えるなら、1人分のプロフィールを1枚の紙にまとめたものです。名前、年齢、メールアドレスなどを、1つのかたまりとして扱えます。
PostgreSQLでは、このJSON形式のデータを、そのまま保存できるようになっています。
3. JSONとJSONBの違い
PostgreSQLには、JSONとJSONBという2種類のデータ型があります。見た目はほとんど同じですが、中身の保存方法が違います。
- JSON:入力した形をそのまま文字として保存
- JSONB:中身を整理して保存(検索が速い)
初心者のうちは、「JSONBは整理された保存形式」と覚えておけば十分です。実務ではJSONBが使われることが多いです。
4. JSONBカラムを持つテーブルを作ってみよう
ここでは、ユーザー情報の中に、自由に項目を追加できるプロフィール情報をJSONBで保存する例を見てみます。
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name TEXT,
age INTEGER,
email TEXT,
profile JSONB
);
CREATE TABLE
profileカラムにJSONBを使うことで、「趣味」「住所」「好きな色」など、あとから項目が増えても対応できます。
5. JSONBデータを登録してみよう
次に、JSONBカラムにデータを入れてみます。JSONは、キーと値をセットで書くのが特徴です。
INSERT INTO users (name, age, email, profile)
VALUES (
'山田太郎',
25,
'taro@example.com',
'{"hobby":"サッカー","city":"東京"}'
);
INSERT 0 1
このように、1つのカラムに複数の情報をまとめて保存できます。
6. JSONBデータを含むテーブルの確認
データを登録したあとのテーブルの状態を確認します。
id | name | age | email | profile
---+------------+-----+--------------------+------------------------------
1 | 山田太郎 | 25 | taro@example.com | {"hobby":"サッカー","city":"東京"}
2 | 佐藤花子 | 19 | hanako@example.com | {"hobby":"音楽","city":"大阪"}
3 | 鈴木一郎 | 30 | ichiro@example.com | {"hobby":"読書","city":"名古屋"}
4 | 高橋次郎 | 22 | jiro@example.com | {"hobby":"映画","city":"福岡"}
SELECT *
FROM users;
(4件のレコードが表示される)
7. JSONBの中身を取り出す基本操作
JSONBの便利な点は、中のデータを指定して取り出せることです。たとえば、趣味だけを表示したい場合は次のように書きます。
SELECT
name,
profile->>'hobby' AS hobby
FROM users;
name | hobby
----------+--------
山田太郎 | サッカー
佐藤花子 | 音楽
鈴木一郎 | 読書
高橋次郎 | 映画
「->>」は、JSONBの中から文字として値を取り出すための記号です。
8. JSONBを使うときの注意点
JSONBはとても便利ですが、何でも入れればよいわけではありません。検索や集計が多い項目は、通常のカラムとして定義したほうが分かりやすくなります。
JSONBは、「項目がよく変わる情報」「人によって内容が違う情報」を保存するための箱として使うのがおすすめです。
基本のテーブル構造とJSONBを組み合わせることで、柔軟で扱いやすいデータベース設計ができます。