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

Memasukkan banyak record dengan pg-promise

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 .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ActiveRecord:Bagaimana menemukan orang tua yang SEMUA anaknya cocok dengan suatu kondisi?

  2. Apa cara tercepat untuk memotong cap waktu menjadi 5 menit di Postgres?

  3. Menyinkronkan 2 basis data yang gagal dilakukan

  4. Akankah UUID sebagai kunci utama di PostgreSQL memberikan kinerja indeks yang buruk?

  5. Pilih kolom dari panggilan fungsi di inti sqlalchemy