sql >> Database teknologi >  >> RDS >> PostgreSQL

Upsert i Postgres ved hjælp af node.js

Det umiddelbare svar på dit spørgsmål er at bruge en lagret procedure til at lave en upsert.

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

Sådan noget fungerer fint med pg-modulet.

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
});

Dette forudsætter selvfølgelig, at du bruger en form for modelobjekt, der har alle de værdier, du har brug for, selvom de ikke ændrer sig. Du er nødt til at sende dem alle ind i upsert. Hvis du sidder fast ved at gøre det på den måde, du har vist her, bør du sandsynligvis tjekke det faktiske fejlobjekt efter opdateringen for at afgøre, om det mislykkedes, fordi rækken allerede er der, eller af en anden grund (som er en reel db-fejl, der skal håndteres).

Så er du nødt til at forholde dig til den potentielle race-tilstand mellem det tidspunkt, hvor din opdatering mislykkedes, og det tidspunkt, hvor din indsats går igennem. Hvis en anden funktion forsøger at indsætte med samme id, har du et problem. Transaktioner er gode til det. Det er alt, hvad jeg har lige nu. Håber det hjælper.



  1. Oracle-certificeringer

  2. Knee-Jerk PerfMon tællere:Sidelevetid

  3. Semikolon mangler efter udtrækning af DDL via ksh-script

  4. Sådan finder du relation fra Snomed Postgres SQL-database