【入門編】 JSONB演算子 – PostgreSQL

やあ、こんにちは!データベースの世界へようこそ。

PostgreSQLを触っていると、一度は「決まった列だけじゃなくて、もっと柔軟にデータを放り込みたいな」って思うこと、ありますよね。そんな時に頼りになるのが `JSONB` 型というやつです。

一言でいえば、JSONBは「なんでも入る魔法の小箱」。ただ、この箱の中身をどう扱うかで、データベースのパフォーマンスやコードの書きやすさがガラリと変わるんです。今日は、この小箱を自在に操る「魔法の呪文(演算子)」たちを、日常の例えを交えて紹介しますね。

—

そもそも「JSONB」って何だっけ?

普通のデータベースの列は「名前は文字列」「年齢は数字」とガチガチに決められています。でも、JSONBは「とりあえずここに何でも詰め込んでおいて!」という自由な場所。

例えるなら、「引き出しの中の整理ボックス」みたいなものです。このボックスの中身をどう検索したり加工したりするか、さっそく見ていきましょう。

—

1. 探す:包含演算子 (@> と

「この引き出しの中に、特定のアイテムが入っているかな?」と探すとき、`@>` を使います。

  • `@>` (左側に右側が含まれているか)
  • 例:`data @> ‘{“color”: “red”}’`
  • 「この引き出しの中に、赤色のアイテムは入ってる?」と聞くイメージです。

逆に、`@>` をひっくり返した `<@` は、「この小さな箱は、大きな箱の一部として収まるか?」を確認するもの。あまり出番は多くないですが、セットで覚えておくと便利です。 ---

2. いるかいないか?:存在演算子 (?, ?|, ?&)

「中身の詳細はいいから、とにかくその『タグ』がついたものがあるかどうか知りたい!」という時はこれ。

  • `?`:特定のキーがあるか(「『サイズ』というラベルは貼ってある?」)
  • `?|`:指定したどれか一つでもキーがあるか(「『赤』か『青』のどっちかのラベルはある?」)
  • `?&`:指定したキーが全部あるか(「『サイズ』と『重さ』の両方が書いてある?」)

これらは検索条件を絞るときに、SQLをすごく短く書いてくれるので重宝しますよ。

—

3. 合体と削除:連結 (||) と 削除 (-, #-)

JSONBの面白いところは、後から中身をいじれること。

  • 連結 `||`
  • 「箱と箱をくっつける」イメージ。新しい情報を追加したり、上書きしたりするのに使います。
  • 削除 `-` と `#-`
  • `-` はキーを消す。「『価格』っていうタグを剥がして!」という感じ。
  • `#-` は、もっと深い場所(入れ子の階層)にあるデータを消すときに使います。「引き出しの中の、さらに小さな箱の中身を消す」といった精密な操作が得意です。

—

4. 取り出す:抽出演算子 (-> と ->>)

最後は、中身を直接手元に取り出す方法です。

  • `->`:JSONBの形式のまま取り出す(「箱の中身を、別の小さな箱に入れて渡す」)
  • `->>`:テキスト形式で取り出す(「箱の中身を、中身だけ取り出してメモ帳に書き写す」)

ここが大事!
もし後でその値を使って計算したいなら `->` を、単に画面に表示したり検索条件に使うだけなら `->>` を使うのが定石です。特に「数字」として扱いたい場合、`->>` で取り出すとテキストになっちゃうので、`::int` とかをつけて数値に変換するのを忘れないでくださいね。

—

まとめ:使いすぎにはご用心!

JSONBは本当に便利です。でも、初心者のうちは「全部JSONBに入れちゃえ!」とやりがち。それだと、せっかくのデータベースの整理整頓機能が台無しになっちゃいます。

  • 「頻繁に検索するデータ」は、普通の列(固定の列)にする。
  • 「たまにしか使わない、形がバラバラなデータ」をJSONBに入れる。

この使い分けができるようになると、あなたも立派なデータベースマスターの仲間入りです!

JSONBの演算子は、最初は呪文みたいで難しく感じるかもしれません。でも、実際にターミナルで `SELECT` 文を叩いて、思い通りのデータが返ってきた時の「おっ、取れた!」という喜びは格別ですよ。

ぜひ、皆さんのプロジェクトでも試してみてくださいね。また次回の記事でお会いしましょう!

コメント

タイトルとURLをコピーしました