PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Upsert в Postgres с помощта на node.js

Незабавният отговор на въпроса ви е да използвате съхранена процедура, за да направите upsert.

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

Нещо подобно работи добре с 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
});

Разбира се, това предполага, че използвате някакъв модел на обект, който има всички стойности, от които се нуждаете, дори ако те не се променят. Трябва да ги прехвърлите всички в upsert. Ако сте останали да го правите по начина, който сте показали тук, вероятно трябва да проверите действителния обект за грешка след актуализацията, за да определите дали е неуспешна, защото редът вече е там, или по някаква друга причина (което е истинска db грешка, която трябва да се обработи).

След това трябва да се справите с потенциалното състояние на състезание между момента, в който актуализацията ви е неуспешна, и времето, през което преминава вашето вмъкване. Ако друга функция се опита да вмъкне със същия идентификатор, имате проблем. Транзакциите са добри за това. Това е всичко, което имам в момента. Надявам се да помогне.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Оптимизиране на скоростта на базата данни:няколко таблици с много редове или много таблици с малко редове?

  2. ГРЕШКА:заявката няма местоназначение за данните за резултатите

  3. Как да закръгля стойността на милисекунди от timestamp(0) в PostgreSQL?

  4. Как да рестартирате броенето на id на таблица в PostgreSQL след изтриване на някои предишни данни?

  5. изберете максимални и минимални стойности на всеки x брой редове-postgresql