2017-08-08 3 views
0

ich eine sehr einfache Sache zu erreichen bin versucht:Wie auszuführen Transaktion mit massive.js

START TRANSACTION; 
DELETE FROM table WHERE id = 1; 
ROLLBACK; 

dies auf der postgres Datenbank Lauf funktioniert perfekt. Mit massive.js tut es nicht:

this.db.run(
    "START TRANSACTION", 
    [] 
); 
setTimeout(() => { 
    this.db.run(
     "DELETE FROM table WHERE id = $1" 
     [1] 
    ); 
}, 2000); 
setTimeout(() => { 
    this.db.run(
     "ROLLBACK;" 
     [] 
    ); 
}, 4000); 

Es ist nicht die Änderungen Rollback löscht nur aus der Datenbank. COMMIT funktioniert nicht so gut. Was ist los mit dir?

Gibt es eine Möglichkeit zum Abfragen von Abfragen Reihenfolge?

+0

Was ist der Sinn einer solchen Transaktion, da Sie genau mit nichts enden? –

Antwort

0

Massives Anwendungen pg-promise darunter, was wiederum unterstützt Transaktionen:

db.instance.tx(t => { 
    // BEGIN has been executed 
    return t.none('DELETE FROM table WHERE id = $1', [123]) 
     .then(() => { 
      // Records have been deleted within the transaction 

      throw new Error('Random error to fail the transaction'); 
      // = the same as returning Promise.reject(new Error('Random...')) 
     }); 
}) 
    .catch(error => { 
     // ROLLBACK has been executed, no records end up deleted. 
     console.log(error); 
    }); 

Siehe auch:

Gibt es eine Möglichkeit, Abfragen Reihenfolge abzulegen?

Monitoring Queries zeigt Ihnen, wie es zu tun, oder Sie können Ereignis query Handler innerhalb db.driverConfig Objekt hinzufügen, wenn massive initialisiert.