دروس الوحدة (1/2)
التكامل بين JSON وJSONB
تكامل JSON وJSONB
أعادت PostgreSQL كتابة قواعد قواعد البيانات من خلال الجمع بين طبيعة ACID المطمئنة والصلبة لـ SQL مع المرونة الديناميكية والسلسة النموذجية لـ NoSQL. لقد فعلت ذلك من خلال تقديم أعمدة مخصصة أصلاً لتخزين بيانات JSON.
تنبيه: في Postgres يوصى دائمًا باستخدام JSONB. يشير الحرف "B" إلى ثنائي: تفقد مستندات JSON المخزنة في هذه الأعمدة تنسيقها النصي البحت، ولكنها تكتسب القدرة على التحقق من صحتها والاستعلام عنها بأداء عالٍ للغاية ومعالجتها وحتى فهرستها باستخدام B-tree الكلاسيكي أو 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 من المحاولات
ماذا لو مررنا مصفوفة؟ يعمل الوصول إلى المصفوفة في json_b في Postgres بواسطة INDEX (يعتمد على الصفر). قم باستخراج العنصر الثاني كنص من \`'["A"، "B"، "C"]'::json\` وقم بتسميته "حرف".
إظهار التلميح
->>1 (إنها مبنية على الصفر!)
الحل متاح بعد 3 من المحاولات