メインコンテンツにスキップ
モジュール 15 · レッスン 1 / 2コース内の 56/57~15 min
モジュールのレッスン (1/2)

JSON と JSONB の統合

JSON と JSONB の統合

PostgreSQL は、SQL の安心感のある堅牢な ACID の性質と、NoSQL に特有の動的で流動的な柔軟性を組み合わせることにより、データベースのルールを書き換えました。これは、JSON データの保存専用の列をネイティブに提供することで実現されました。

注意: Postgres では、ほとんどの場合 JSONB を使用することが推奨されます。 「B」はバイナリを表します。これらの列に保存された JSON ドキュメントは、純粋なテキストの書式設定を失いますが、非常に高いパフォーマンスで検証、クエリを実行し、操作し、さらには従来の B ツリーまたは GIN INDEX でインデックスを作成する機能を獲得します。

JSON のナビゲーション: 「矢印」演算子

残念ながら、ecommerce データベースには現在、事前定義された純粋な JSON 列がありません。ただし、一時的な JSON 値を作成し、テキストから「キャスト」することはできます。

JSON を操作する場合、オブジェクトと配列をドリルダウンする演算子は、-> (データを純粋な jsonb/json 形式に保持) またはその「拡張」バージョン ->> (検出された JSON データをテキストに変換) です。

「メタデータ」JSON 列が存在するかのような学術的な例:

SQL
-- Look up the value associated with the info key
SELECT metadata->'info' FROM users;

-- Drill into info, and grab city as text
SELECT metadata->'info'->>'city' FROM users;
運動#sql.m15.l1.e1
試行回数: 0読み込み中…

オンザフライで JSON をクエリしてみましょう。この JSON リテラル \`'{"user": {"name": "Mario"}}'::json\` を投影し、\`->\` 演算子とテキスト バージョン (\`->>\`) を組み合わせて「name」を抽出し、抽出された列に「user_name」という名前を付けます。

エディターを読み込み中…
ヒントを表示

::json または ::jsonb にキャストし、->'user'->>'name' を使用します。

3 回の試行後に解決策が利用可能になります

運動#sql.m15.l1.e2
試行回数: 0読み込み中…

配列を渡すとどうなるでしょうか? Postgres の json_b の配列アクセスは INDEX (ゼロベース) によって機能します。 \`'["A", "B", "C"]'::json\` から SECOND 要素をテキストとして抽出し、「letter」という名前を付けます。

エディターを読み込み中…
ヒントを表示

->>1 (ゼロベースです!)

3 回の試行後に解決策が利用可能になります