דילוג לתוכן המרכזי
מודול 15 · שיעור 1 מתוך 256/57 בקורס~15 min
שיעורי מודול (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 "מטא נתונים":

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\` והשתמש באופרטור \`->\` בשילוב עם הגרסה הטקסטואלית (\`->>\`) כדי לחלץ 'שם', מתן שם לעמודה שחולצה 'user_name'.

טוען עורך...
הצג רמז

העבר אל ::json או ::jsonb, והשתמש ב->'user'->>'name'.

הפתרון זמין לאחר 3 ניסיונות

פעילות גופנית#sql.m15.l1.e2
ניסיונות: 0טוען...

מה אם נעבור מערך? גישה למערך ב-json_b ב-Postgres עובדת על ידי INDEX (מבוסס אפס). חלץ את הרכיב SECOND כטקסט מ-\`'["A", "B", "C"]'::json\` וקרא לו 'אות'.

טוען עורך...
הצג רמז

->>1 (זה מבוסס אפס!)

הפתרון זמין לאחר 3 ניסיונות