Ana içeriğe geç
Modül 15 · Ders 1 ders 2Kurstaki 56/57~15 min
Modül dersleri (1/2)

JSON ve JSONB entegrasyonu

JSON ve JSONB Entegrasyonu

PostgreSQL, SQL'in güven verici, sağlam ACID yapısını NoSQL'e özgü dinamik, akıcı esneklikle birleştirerek veritabanlarının kurallarını yeniden yazdı. Bunu, yerel olarak JSON verilerini depolamaya ayrılmış sütunlar sunarak yaptı.

Dikkat: Postgres'te neredeyse her zaman JSONB kullanılması önerilir. "B" İkili anlamına gelir: Bu sütunlarda saklanan JSON belgeleri tamamen metinsel biçimlendirmelerini kaybeder, ancak klasik B-ağacı veya GIN INDEX ile doğrulanma, çok yüksek performansla sorgulanma, değiştirilme ve hatta indekslenme yeteneğini kazanırlar.

JSON'da gezinme: "Ok" operatörü

Maalesef ecommerce veritabanında şu anda önceden tanımlanmış saf JSON sütunları bulunmamaktadır. Ancak geçici JSON değerleri oluşturabilir ve bunları metinden "yayınlayabiliriz"!

JSON ile çalışırken, nesneleri ve dizileri detaylandıran operatörler -> (verileri saf jsonb/json biçiminde tutar) veya "genişletilmiş" sürümü ->>'dir (karşılaşılan JSON verilerini metne dönüştürür).

Akademik örnek, sanki bir "meta veri" JSON sütunu varmış gibi:

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;
Egzersiz#sql.m15.l1.e1
Denemeler: 0Yükleniyor…

JSON'u anında sorgulayalım. Bu json değişmezini \`'{"user": {"name": "Mario"}}'::json\` yansıtın ve çıkarılan sütunu 'user_name' olarak adlandırarak 'name'i çıkarmak için \`->\` operatörünü metin sürümüyle (\`->>\`) birlikte kullanın.

Düzenleyici yükleniyor…
İpucu göster

::json veya ::jsonb'ye aktarın ve ->'user'->>'name' komutunu kullanın.

3 denemeden sonra çözüm mevcut

Egzersiz#sql.m15.l1.e2
Denemeler: 0Yükleniyor…

Bir diziyi aktarırsak ne olur? Postgres'teki json_b'deki dizi erişimi INDEX (sıfır tabanlı) ile çalışır. SECOND öğesini \`'["A", "B", "C"]'::json\` içinden metin olarak çıkarın ve 'letter' olarak adlandırın.

Düzenleyici yükleniyor…
İpucu göster

->>1 (sıfır tabanlıdır!)

3 denemeden sonra çözüm mevcut