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

Upsert di Postgres menggunakan node.js

Jawaban langsung untuk pertanyaan Anda adalah dengan menggunakan prosedur tersimpan untuk melakukan upsert.

http://www.postgresql .org/docs/current/static/plpgsql-control-structures.html#PLPGSQL-UPSERT-EXAMPLE

Sesuatu seperti ini bekerja dengan baik dengan modul pg.

client.query({
  text: "SELECT upsert($1, $2, $3, $4, $5, $6)"
  values: [ obj.id, 
            obj.first_name,
            obj.last_name,
            1,
            ip,
            date_now.getFullYear() + "-" + month + "-" + date_now.getDate() + " " + date_now.getHours() + ":" + date_now.getMinutes() + ":" + date_now.getSeconds()
          ]
}, function(u_err, u_result){
  if(err) // this is a real error, handle it

  // otherwise your data is updated or inserted properly
});

Tentu saja ini mengasumsikan bahwa Anda menggunakan semacam objek model yang memiliki semua nilai yang Anda butuhkan, bahkan jika nilai tersebut tidak berubah. Anda harus melewati mereka semua ke upsert. Jika Anda terjebak melakukannya seperti yang Anda tunjukkan di sini, Anda mungkin harus memeriksa objek kesalahan yang sebenarnya setelah pembaruan untuk menentukan apakah itu gagal karena baris sudah ada di sana, atau karena alasan lain (yang merupakan kesalahan db nyata yang perlu ditangani).

Maka Anda harus berurusan dengan kondisi balapan potensial antara waktu pembaruan Anda gagal dan waktu penyisipan Anda berhasil. Jika beberapa fungsi lain mencoba memasukkan dengan id yang sama, Anda mendapat masalah. Transaksi baik untuk itu. Hanya itu yang saya dapatkan sekarang. Semoga membantu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hibernate, Postgresql:Kolom x bertipe oid tetapi ekspresi bertipe byte

  2. ekspor tabel ke csv di postgres

  3. cara memperbaiki OperationalError:(psycopg2.OperationalError) server menutup koneksi secara tidak terduga

  4. cara membuat tabel tanggal gregorian ISO-8601 di postgres

  5. Referensi kolom set Postgres ON CONFLICT ambigu