カテゴリ: PostgreSQL 更新日: 2026/02/25

PostgreSQLのJSON・JSONBデータ型を完全解説|初心者でもわかるテーブル定義とデータ型の基礎

PostgreSQLのJSON/JSONBデータ型を徹底解説
PostgreSQLのJSON/JSONBデータ型を徹底解説

先生と生徒の会話形式で理解しよう

生徒

「PostgreSQLを勉強していたら、JSONとかJSONBっていうデータ型が出てきました。普通の文字と何が違うんですか?」

先生

「JSONは、データをまとめて保存できる形式です。紙のメモを束ねてクリアファイルに入れるようなイメージですね。」

生徒

「パソコンもSQLもほとんど分からないんですが、使いこなせますか?」

先生

「大丈夫です。まずは“箱に入れて保存する”感覚から、JSONとJSONBの違いや使いどころを説明していきます。」

1. SQLとは何か?

1. SQLとは何か?
1. SQLとは何か?

SQLは、データベースという「情報をたくさん保存する箱」に対して指示を出すための言語です。表の形で保存されているデータを、見たり、追加したり、書き換えたりするために使います。

PostgreSQLでは、数値や文字だけでなく、少し複雑なデータを扱うための特別なデータ型も用意されています。その代表例がJSONとJSONBです。

2. JSONとは何かを超かんたんに理解しよう

2. JSONとは何かを超かんたんに理解しよう
2. JSONとは何かを超かんたんに理解しよう

JSONは、「データの書き方のルール」です。名前と値をセットにして、ひとまとめに表現できます。

例えるなら、1人分のプロフィールを1枚の紙にまとめたものです。名前、年齢、メールアドレスなどを、1つのかたまりとして扱えます。

PostgreSQLでは、このJSON形式のデータを、そのまま保存できるようになっています。

3. JSONとJSONBの違い

3. JSONとJSONBの違い
3. JSONとJSONBの違い

PostgreSQLには、JSONとJSONBという2種類のデータ型があります。見た目はほとんど同じですが、中身の保存方法が違います。

  • JSON:入力した形をそのまま文字として保存
  • JSONB:中身を整理して保存(検索が速い)

初心者のうちは、「JSONBは整理された保存形式」と覚えておけば十分です。実務ではJSONBが使われることが多いです。

4. JSONBカラムを持つテーブルを作ってみよう

4. 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データを登録してみよう

5. 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データを含むテーブルの確認

6. JSONBデータを含むテーブルの確認
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の中身を取り出す基本操作

7. JSONBの中身を取り出す基本操作
7. JSONBの中身を取り出す基本操作

JSONBの便利な点は、中のデータを指定して取り出せることです。たとえば、趣味だけを表示したい場合は次のように書きます。


SELECT
    name,
    profile->>'hobby' AS hobby
FROM users;

 name     | hobby
----------+--------
 山田太郎 | サッカー
 佐藤花子 | 音楽
 鈴木一郎 | 読書
 高橋次郎 | 映画

「->>」は、JSONBの中から文字として値を取り出すための記号です。

8. JSONBを使うときの注意点

8. JSONBを使うときの注意点
8. JSONBを使うときの注意点

JSONBはとても便利ですが、何でも入れればよいわけではありません。検索や集計が多い項目は、通常のカラムとして定義したほうが分かりやすくなります。

JSONBは、「項目がよく変わる情報」「人によって内容が違う情報」を保存するための箱として使うのがおすすめです。

基本のテーブル構造とJSONBを組み合わせることで、柔軟で扱いやすいデータベース設計ができます。

カテゴリの一覧へ
新着記事
New1
MySQL
【MySQL入門】LIMITとは何か?SELECT文で取得件数を制限する方法を初心者向けに徹底解説
New2
PostgreSQL
PostgreSQLのMAX・MIN完全解説|集約関数とGROUP BYで最大値・最小値を抽出する方法
New3
MySQL
MySQLのORDER BYで文字列を並び替える方法と注意点を徹底解説|SQL初心者向け完全ガイド
New4
PostgreSQL
PostgreSQLのSUM・AVG完全解説|集約関数とGROUP BYの計算時の注意点を初心者向けにやさしく説明
人気記事
No.1
Java&Spring記事人気No1
PostgreSQL
PostgreSQLのUPDATE文の使い方(部分更新・条件更新)
No.2
Java&Spring記事人気No2
PostgreSQL
PostgreSQLでスキーマを分割するメリット
No.3
Java&Spring記事人気No3
PostgreSQL
PostgreSQLスキーマ作成・削除完全ガイド!初心者でもわかるデータベース設計の基礎
No.4
Java&Spring記事人気No4
PostgreSQL
PostgreSQLとは?初心者向けに特徴をわかりやすく解説
No.5
Java&Spring記事人気No5
PostgreSQL
PostgreSQLの主キー・外部キーを完全解説!初心者でもわかる設定方法と考え方
No.6
Java&Spring記事人気No6
PostgreSQL
PostgreSQLのORDER BYの基本(昇順・降順)
No.7
Java&Spring記事人気No7
PostgreSQL
PostgreSQLのpublicスキーマの役割と扱い方
No.8
Java&Spring記事人気No8
PostgreSQL
PostgreSQLでよく使うデータ型一覧(文字列・数値・日付)