PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara melakukan operasi pembaruan pada kolom tipe JSONB di Postgres 9.4

Jika Anda dapat meningkatkan ke Postgresql 9.5, jsonb_set perintah tersedia, seperti yang telah disebutkan orang lain.

Dalam setiap pernyataan SQL berikut, saya telah menghilangkan where klausa untuk singkatnya; jelas, Anda ingin menambahkannya kembali.

Perbarui nama:

UPDATE test SET data = jsonb_set(data, '{name}', '"my-other-name"');

Ganti tag (sebagai lawan menambahkan atau menghapus tag):

UPDATE test SET data = jsonb_set(data, '{tags}', '["tag3", "tag4"]');

Mengganti tag kedua (diindeks 0):

UPDATE test SET data = jsonb_set(data, '{tags,1}', '"tag5"');

Tambahkan tag (ini akan berfungsi selama tag kurang dari 999; mengubah argumen 999 ke 1000 atau lebih akan menghasilkan kesalahan . Ini tampaknya tidak lagi menjadi kasus di Postgres 9.5.3; indeks yang jauh lebih besar dapat digunakan):

UPDATE test SET data = jsonb_set(data, '{tags,999999999}', '"tag6"', true);

Hapus tag terakhir:

UPDATE test SET data = data #- '{tags,-1}'

Pembaruan kompleks (hapus tag terakhir, masukkan tag baru, dan ubah nama):

UPDATE test SET data = jsonb_set(
    jsonb_set(data #- '{tags,-1}', '{tags,999999999}', '"tag3"', true), 
    '{name}', '"my-other-name"');

Penting untuk dicatat bahwa dalam setiap contoh ini, Anda tidak benar-benar memperbarui satu bidang data JSON. Sebagai gantinya, Anda membuat versi data yang diubah sementara, dan menetapkan versi yang dimodifikasi itu kembali ke kolom. Dalam praktiknya, hasilnya harus sama, tetapi dengan mengingat hal ini, pembaruan yang rumit, seperti contoh terakhir, akan lebih mudah dipahami.

Dalam contoh kompleks, ada tiga transformasi dan tiga versi sementara:Pertama, tag terakhir dihapus. Kemudian, versi tersebut diubah dengan menambahkan tag baru. Selanjutnya, versi kedua diubah dengan mengubah name bidang. Nilai dalam data kolom diganti dengan versi final.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bandingkan array untuk kesetaraan, abaikan urutan elemen

  2. Untuk mengabaikan kunci duplikat selama 'salin dari' di postgresql

  3. Prioritas berdasarkan waktu dalam Permintaan Rekaman Aktif

  4. Cara Menginstal PostgreSQL 12 di Ubuntu 20.04 DigitalOcean

  5. Cara Meningkatkan Koneksi Maks di PostgreSQL