こんにちは!データベースの世界へようこそ。
普段、私たちは「1行1列」の整然としたテーブルにデータを詰め込んで管理していますが、最近のシステム開発では「ちょっと形が複雑なデータ」を扱う機会も増えましたよね。「ここは項目が増えるかもしれないから、とりあえず自由に入れられる箱が欲しい!」そんな時に大活躍するのがPostgreSQLのJSONB型です。
今日は、この「魔法の箱」を自由自在に操るための便利な関数たちを、日常の整理術に例えて紹介していきますね。
—
1. まっさらな箱に詰め込む:`jsonb_build_object`
まずは、バラバラの材料からJSONという「お弁当箱」を作るお話です。
例えば、名前と年齢を別々に持っているけど、一つの塊にしたいとき。そんな時は `jsonb_build_object` を使います。
SELECT jsonb_build_object(‘name’, ‘たろう’, ‘age’, 25);
— 結果: {“age”: 25, “name”: “たろう”}
これはまるで、「名前の付箋」と「中身」をセットにして、箱にポンと詰め込む作業です。「このラベルはこれ、こっちの値はこれ」と指定するだけで、きれいなJSONが出来上がります。
2. たくさんのデータを一つにまとめる:`jsonb_object_agg`
次は、バラバラの行にあるデータを、一気に一つのJSONにまとめたい場面。これはまさに「集計」の魔法です。
例えば、社員の名前と部署を一覧にしたいとき、`jsonb_object_agg` を使うと……
SELECT jsonb_object_agg(name, department) FROM employees;
— 結果: {“たろう”: “営業部”, “はなこ”: “開発部”, …}
「クラス全員の自己紹介カードを、一冊のアルバムにまとめる」ようなイメージですね。バラバラだった個別のデータが、一つの大きな情報源に早変わりします。
3. 箱の中身をバラして並べる:`jsonb_array_elements`
逆に、箱の中にたくさん入っているリストを、もう一度テーブルの行に戻したい!という時もありますよね。そんな時に使うのが `jsonb_array_elements` です。
「おもちゃ箱をひっくり返して、中身を一つずつ床に並べる」様子を想像してください。
SELECT jsonb_array_elements(‘[{“item”: “りんご”}, {“item”: “みかん”}]’::jsonb);
— 結果:
— {“item”: “りんご”}
— {“item”: “みかん”}
これを使うと、JSONの中に隠れていたデータが「普通の行」として扱えるようになるので、後から計算したりフィルタリングしたりするのがめちゃくちゃ楽になります。
4. こっそり中身を差し替える:`jsonb_set`
「箱の中身の、住所だけを最新に変えたい!」というような、ピンポイントな修正には `jsonb_set` です。
— 元のデータから「住所」の場所を指定して、新しい値に書き換える
SELECT jsonb_set(data, ‘{address}’, ‘”東京都渋谷区”‘);
これは「書類の特定の箇所に修正テープを貼って、上から書き直す」作業に似ています。他のデータはそのままに、必要な場所だけをスマートに更新できるのが強みですね。
5. 無駄なスペースを省く:`jsonb_strip_nulls`
最後に、ちょっとした整理術です。JSONを扱っていると、中身が「空(NULL)」のデータが混ざってしまうこと、ありますよね。そんな不要なものを一掃するのが `jsonb_strip_nulls` です。
SELECT jsonb_strip_nulls(‘{“name”: “たろう”, “memo”: null}’);
— 結果: {“name”: “たろう”}
「お弁当箱の、食べられない飾り(NULL)を取り除いてスッキリさせる」作業です。これを通すだけで、データが軽やかになりますよ。
—
まとめ:JSONBは怖くない!
こうして並べてみると、JSONBの関数たちは「整理整頓」のための道具だということが分かりますよね。
1. 作る (`jsonb_build_object`)
2. まとめる (`jsonb_object_agg`)
3. 取り出す (`jsonb_array_elements`)
4. 修正する (`jsonb_set`)
5. 掃除する (`jsonb_strip_nulls`)
最初は難しく感じるかもしれませんが、まずは「箱の中身をどうしたいかな?」という視点で眺めてみてください。きっと、PostgreSQLがあなたの強力なアシスタントになってくれるはずです。
もし「こんな時はどうするの?」という疑問があれば、ぜひ気軽に触ってみてくださいね。データベースを操る楽しさが、少しでも伝われば嬉しいです!
コメント