Saya adalah penulis pg-promise .
Ada dua cara untuk menyisipkan beberapa record. Cara pertama, dan paling umum adalah melalui transaksi, untuk memastikan semua catatan dimasukkan dengan benar, atau tidak ada satupun.
Dengan pg-promise dilakukan dengan cara berikut:
db.tx(t => {
const queries = lst.map(l => {
return t.none('INSERT INTO table(id, key, value) VALUES(${id}, ${key}, ${value})', l);
});
return t.batch(queries);
})
.then(data => {
// SUCCESS
// data = array of null-s
})
.catch(error => {
// ERROR
});
Anda memulai transaksi dengan metode tx
, lalu buat semua INSERT
kueri janji, lalu selesaikan semuanya sebagai batch
.
Pendekatan kedua adalah dengan menggabungkan semua nilai sisipan ke dalam satu INSERT
kueri, yang saya jelaskan secara detail di Peningkatan Kinerja
. Lihat juga:Insert multi-baris dengan pg-promise .
Untuk contoh lainnya, lihat Tugas dan Transaksi .
Penambahan
Perlu ditunjukkan bahwa dalam banyak kasus kita tidak memasukkan catatan id
, alih-alih membuatnya dibuat secara otomatis. Terkadang kami ingin mendapatkan id baru kembali, dan dalam kasus lain kami tidak peduli.
Contoh di atas diselesaikan dengan larik null
-s, karena batch
diselesaikan dengan serangkaian hasil individual, dan metode none
diselesaikan dengan null
, menurut API-nya.
Mari kita asumsikan bahwa kita ingin membuat id-s baru, dan kita ingin mendapatkan semuanya kembali. Untuk mencapai ini, kami akan mengubah kode menjadi berikut:
db.tx(t => {
const queries = lst.map(l => {
return t.one('INSERT INTO table(key, value) VALUES(${key}, ${value}) RETURNING id',
l, a => +a.id);
});
return t.batch(queries);
})
.then(data => {
// SUCCESS
// data = array of new id-s;
})
.catch(error => {
// ERROR
});
yaitu perubahannya adalah:
- kami tidak memasukkan
id
nilai - kami mengganti metode none dengan satu , untuk mendapatkan satu baris/objek dari setiap sisipan
- kami menambahkan
RETURNING id
ke kueri untuk mendapatkan nilai - kami menambahkan
a => +a.id
untuk melakukan transformasi baris otomatis. Lihat juga pg-promise mengembalikan bilangan bulat sebagai string untuk memahami apa itu+
adalah untuk.
PERBARUI-1
Untuk pendekatan kinerja tinggi melalui satu INSERT
kueri lihat Insert multi-baris dengan pg-promise .
PERBARUI-2
Artikel yang harus dibaca:Impor Data .