0Pricing
SQL Academy · レッスン

パス演算子:->、->>、@>

->、->>、#>>でJSONBドキュメントをたどり、@>とjsonb_path_queryファミリーで包含関係を確認します。

「パス演算子:->、->>、@>」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。

3つの演算子ファミリー

JSONBのパス演算子は、3種類に分けられます。

  • ->と->> — キーまたはインデックスで抽出
  • #>と#>> — パスで抽出
  • @>と? — 包含またはキーの存在を確認

-> はJSONBを返す

値を抽出し、JSONBのまま保持します。

SELECT data->'user_id' FROM events;
-- returns JSONB like  42

SELECT data->0 FROM events;
-- first element of a JSONB array

->> はテキストを返す

値をTEXTとして抽出します。キャストに便利です。

SELECT data->>'user_id'  FROM events;
-- '42'  (TEXT)

SELECT (data->>'user_id')::BIGINT FROM events;
-- 42    (BIGINT)

#> によるパス抽出(JSONB)

キーの配列を使って、複数の階層をたどります。

SELECT data #> '{user, address, city}' FROM events;
-- nested JSONB value

#>> によるパス抽出(TEXT)

#>と同じですが、TEXTを返します。

SELECT data #>> '{user, address, city}' FROM events;
-- 'Berlin'

@> による包含

「ドキュメントにこのサブドキュメントが含まれているか」を判定します。最も便利なフィルタです。

SELECT * FROM events
WHERE data @> '{"type":"login"}';

-- Works for nested matching too:
WHERE data @> '{"user":{"plan":"pro"}}'

? によるキーの存在確認

トップレベルにキーが存在するかを確認します。

SELECT * FROM events WHERE data ? 'error';
SELECT * FROM events WHERE data ?| ARRAY['a','b'];    -- any of these keys
SELECT * FROM events WHERE data ?& ARRAY['a','b'];    -- all of these keys

JSONBパスクエリ(jsonb_path_query)

最近のPostgreSQLでは、SQL/JSONパス式に対応しています。

SELECT jsonb_path_query(data, '$.user.tags[*]') FROM events;
SELECT jsonb_path_exists(data, '$.user.tags[*] ? (@ == "admin")') FROM events;

インデックスとの組み合わせ

GINインデックスにより、@>と?を高速化できます。

CREATE INDEX events_data_gin ON events USING GIN (data);
-- supports @>, ?, ?|, ?&

CREATE INDEX events_data_path_gin ON events USING GIN (data jsonb_path_ops);
-- smaller, faster — but only supports @>

JSONB内部の配列を検索する

配列に値が含まれるドキュメントを検索します。

SELECT * FROM events
WHERE data->'tags' @> '["admin"]'::JSONB;

-- Or via path query:
SELECT * FROM events
WHERE jsonb_path_exists(data, '$.tags[*] ? (@ == "admin")');

JSONBを更新する

jsonb_set、||、-を使って変更します。

UPDATE events
SET data = jsonb_set(data, '{user,plan}', '"pro"')
WHERE id = 1;

UPDATE events SET data = data || '{"new_field":true}'::JSONB;
UPDATE events SET data = data - 'old_field';

JSONBを集約する

複数の行を1つのJSONBにまとめます。

SELECT jsonb_agg(data) FROM events WHERE user_id = 42;
SELECT jsonb_object_agg(name, value) FROM settings;

まとめ

パス演算子を使うと、抽出から変更まで幅広い操作ができます。

  • -> はJSONB、->>はTEXT
  • #> はパス、#>>はパスからTEXTを返す
  • @> は包含(GINインデックスに対応)
  • 更新にはjsonb_set / || / -

理解度チェック

data->'k'とdata->>'k'の違いは何ですか。

よくある質問

「パス演算子:->、->>、@>」レッスンは無料ですか?

はい。「パス演算子:->、->>、@>」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。

「パス演算子:->、->>、@>」で何を学びますか?

->、->>、#>>でJSONBドキュメントをたどり、@>とjsonb_path_queryファミリーで包含関係を確認します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

SQL Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「パス演算子:->、->>、@>」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSQL Academyレッスンでコードを書いて実行できますか?

はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. JSONBとJSON:使い分け
  2. パス演算子:->、->>、@>
  3. GINによるJSONBのインデックス化
  4. モデリング:JSONBが正規化を上回る場合
← SQL Academyに戻る