שיעורי מודול (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\` והשתמש באופרטור \`->\` בשילוב עם הגרסה הטקסטואלית (\`->>\`) כדי לחלץ 'שם', מתן שם לעמודה שחולצה 'user_name'.
הצג רמז
העבר אל ::json או ::jsonb, והשתמש ב->'user'->>'name'.
הפתרון זמין לאחר 3 ניסיונות
מה אם נעבור מערך? גישה למערך ב-json_b ב-Postgres עובדת על ידי INDEX (מבוסס אפס). חלץ את הרכיב SECOND כטקסט מ-\`'["A", "B", "C"]'::json\` וקרא לו 'אות'.
הצג רמז
->>1 (זה מבוסס אפס!)
הפתרון זמין לאחר 3 ניסיונות