PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Upsert w Postgresie za pomocą node.js

Natychmiastową odpowiedzią na twoje pytanie jest użycie procedury składowanej do wykonania upsert.

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

Coś takiego działa dobrze z modułem 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
});

Oczywiście zakłada to, że używasz jakiegoś obiektu modelu, który ma wszystkie potrzebne wartości, nawet jeśli się nie zmieniają. Musisz je wszystkie przekazać do znużenia. Jeśli utkniesz, robiąc to w sposób, który tutaj pokazano, powinieneś prawdopodobnie sprawdzić rzeczywisty obiekt błędu po aktualizacji, aby ustalić, czy nie powiodło się, ponieważ wiersz już tam jest, lub z jakiegoś innego powodu (który jest prawdziwym błędem bazy danych, który musi być obsługiwane).

Następnie musisz poradzić sobie z potencjalnym wyścigiem między momentem niepowodzenia aktualizacji a czasem przejścia przez wstawkę. Jeśli jakaś inna funkcja próbuje wstawić z tym samym identyfikatorem, masz problem. Transakcje są do tego dobre. To wszystko, co mam teraz. Mam nadzieję, że to pomoże.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę zapobiec/wykryć niedomiar w obliczeniach Postgresql, które używają EXP()

  2. Jak podzielić tabelę postgres za pomocą tabeli pośredniej

  3. Najlepsze praktyki w zakresie replikacji PostgreSQL — część 2

  4. Wstaw do postgres SQL

  5. Jak skonfigurować HikariCP dla postgresql?