モジュールのレッスン (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 列が存在するかのような学術的な例:
-- 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;オンザフライで JSON をクエリしてみましょう。この JSON リテラル \`'{"user": {"name": "Mario"}}'::json\` を投影し、\`->\` 演算子とテキスト バージョン (\`->>\`) を組み合わせて「name」を抽出し、抽出された列に「user_name」という名前を付けます。
ヒントを表示
::json または ::jsonb にキャストし、->'user'->>'name' を使用します。
3 回の試行後に解決策が利用可能になります
配列を渡すとどうなるでしょうか? Postgres の json_b の配列アクセスは INDEX (ゼロベース) によって機能します。 \`'["A", "B", "C"]'::json\` から SECOND 要素をテキストとして抽出し、「letter」という名前を付けます。
ヒントを表示
->>1 (ゼロベースです!)
3 回の試行後に解決策が利用可能になります