PostgreSQL, JSON verilerini depolamak için iki tür sunar: json
ve jsonb
. Bu veri türleri için etkili sorgulama mekanizmaları uygulamak için PostgreSQL, Bölüm 8.14.6'da açıklanan jsonpath veri türünü de sağlar .
json
Ve jsonb
veri türleri girdi olarak değerlerin hemen hemen aynı setleri kabul ediyoruz. En büyük pratik fark verimliliktir.
json
Veri tipi depolar işleme fonksiyonları her yürütme yeniden ayrıştırma gereken giriş metin, tam bir kopyası; ederken jsonb
veriler saklanır hiçbir yeniden çözümleme gerekli olduğundan, önemli ölçüde daha hızlı sürecine ikili dolayı eklenen dönüşüm yükü biraz daha yavaş girişine yapar biçimi, ancak çürümüş. jsonb
Ayrıca, önemli bir avantaj olabilecek dizin oluşturmayı da destekler.
Çünkü json
tip depolar tam giriş metninin kopyalamak, bu anlamsal-önemsiz beyaz jeton arasındaki boşluğu, hem de JSON nesneleri içindeki tuşların düzeni koruyacaktır. Ayrıca, değer içindeki bir JSON nesnesi birden fazla aynı anahtarı içeriyorsa, tüm anahtar / değer çiftleri korunur. (İşleme işlevleri son değeri etkin olarak kabul eder.) Aksine, jsonb
beyaz alanı korumaz, nesne anahtarlarının sırasını korumaz ve yinelenen nesne anahtarlarını tutmaz. Girişte yinelenen tuşlar belirtilirse, yalnızca son değer korunur.
Genel olarak, çoğu uygulama jsonb
nesne anahtarlarının sıralanması ile ilgili eski varsayımlar gibi oldukça özel ihtiyaçlar olmadıkça JSON verilerini depolamayı tercih etmelidir
.
PostgreSQL veritabanı başına sadece bir karakter seti kodlamasına izin verir. Bu nedenle, veritabanı kodlaması UTF8 olmadığı sürece JSON tiplerinin JSON spesifikasyonuna tam olarak uyması mümkün değildir. Veritabanı kodlamasında temsil edilemeyen karakterleri doğrudan ekleme girişimleri başarısız olur; tersine, veritabanı kodlamasında temsil edilebilecek ancak UTF8'de gösterilemeyen karakterlere izin verilecektir.