ماڈیول اسباق (1/2)
JSON اور JSONB انضمام
JSON اور JSONB انٹیگریشن
PostgreSQL نے ڈیٹابیس کے قواعد کو دوبارہ لکھا ہے تاکہ SQL کی یقین دہانی، راک ٹھوس ACID نوعیت کو NoSQL کی متحرک، سیال لچکدار خصوصیت کے ساتھ ملایا جائے۔ اس نے JSON ڈیٹا کو ذخیرہ کرنے کے لیے مقامی طور پر وقف کالم پیش کر کے ایسا کیا۔
خبردار: پوسٹگریس میں تقریباً ہمیشہ 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\` کو پروجیکٹ کریں اور اقتباس شدہ کالم 'user_name' کو نام دیتے ہوئے 'name' نکالنے کے لیے \"->\" آپریٹر کو ٹیکسٹول ورژن (\`->>\`) کے ساتھ استعمال کریں۔
اشارہ دکھائیں۔
::json یا ::jsonb پر کاسٹ کریں اور ->'user'->>'name' استعمال کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
اگر ہم ایک صف کو پاس کرتے ہیں تو کیا ہوگا؟ پوسٹگریس میں json_b میں سرنی رسائی INDEX (صفر پر مبنی) کے ذریعہ کام کرتی ہے۔ SECOND عنصر کو \`'["A", "B", "C"]'::json\` سے متن کے طور پر نکالیں اور اسے 'حرف' کا نام دیں۔
اشارہ دکھائیں۔
->>1 (یہ صفر پر مبنی ہے!)
3 کوششوں کے بعد حل دستیاب ہے۔