Postgresql 9.5'e yükseltme yapabiliyorsanız, jsonb_set
komut diğerlerinin de bahsettiği gibi kullanılabilir.
Aşağıdaki SQL ifadelerinin her birinde, where
kısalık cümlesini atladım; açıkçası, bunu geri eklemek istersiniz.
Adı güncelle:
UPDATE test SET data = jsonb_set(data, '{name}', '"my-other-name"');
Etiketleri değiştirin (etiket eklemenin veya kaldırmanın aksine):
UPDATE test SET data = jsonb_set(data, '{tags}', '["tag3", "tag4"]');
İkinci etiketin değiştirilmesi (0 dizine alınmış):
UPDATE test SET data = jsonb_set(data, '{tags,1}', '"tag5"');
Bir etiket ekleyin ( bu, 999 etiketten az olduğu sürece işe yarar; 999'un 1000 veya daha üstündeki bağımsız değişkeni değiştirmek bir hata oluşturur . Postgres 9.5.3'te artık durum böyle görünmüyor; çok daha büyük bir dizin kullanılabilir) :
UPDATE test SET data = jsonb_set(data, '{tags,999999999}', '"tag6"', true);
Son etiketi kaldırın:
UPDATE test SET data = data #- '{tags,-1}'
Karmaşık güncelleme (son etiketi silin, yeni bir etiket ekleyin ve adı değiştirin):
UPDATE test SET data = jsonb_set(
jsonb_set(data #- '{tags,-1}', '{tags,999999999}', '"tag3"', true),
'{name}', '"my-other-name"');
Bu örneklerin her birinde, aslında JSON verilerinin tek bir alanını güncellemediğinizi unutmamak önemlidir. Bunun yerine, verilerin geçici, değiştirilmiş bir sürümünü oluşturuyorsunuz ve bu değiştirilmiş sürümü tekrar sütuna atıyorsunuz. Pratikte sonuç aynı olmalı, ancak bunu akılda tutmak son örnekte olduğu gibi karmaşık güncellemeleri daha anlaşılır hale getirmelidir.
Karmaşık örnekte, üç dönüşüm ve üç geçici sürüm vardır: Birincisi, son etiket kaldırılır. Daha sonra bu sürüm, yeni bir etiket eklenerek dönüştürülür. Ardından name
alan değiştirilerek ikinci versiyon dönüştürülür . data
Sütundaki değer , son sürümle değiştirilir.