/ / Dlaczego wyniki zapytania wstawiania pozostają w bazie danych po wycofaniu transakcji? pg-promise - node.js, pg-promise

Dlaczego wyniki kwerendy wstawiania pozostają w bazie danych po wycofaniu transakcji? pg-promise - node.js, pg-promise

Niedawno wdrożyłem pg-obietnicę w jednym z moich projektów i próbuję zrozumieć, jak funkcjonują transakcje. Testuję z następującą funkcją:

testFunction: (req, res, next) => {
db.tx(async t =>{
await db.any("insert into services (servicename, price, itemcode, servicedescription, active, subscriptionid) values ($1, $2, $3, $4, $5, $6) returning *;", ["babysitting", 25, "12321", "taking care of children", true, 1])
await db.any("insert into orangutans (name, age, sex) values ($1, $2, $3)", ["beau", 22, "male"])
})
.then(data=>{
res.json(data)
})
.catch(error=>{
res.json(error)
})
}

Modelowałem ten fragment kodu po następującym przykładzie w dokumentacji pg-promise:

db.tx(async t => {
await t.none("UPDATE users SET active = $1 WHERE id = $2", [true, 123]);
await t.one("INSERT INTO audit(entity, id) VALUES($1, $2) RETURNING id", ["users", 123]);
})
.then(data => {
// success, COMMIT was executed
})
.catch(error => {
// failure, ROLLBACK was executed
});

Pierwsze zapytanie działa poprawnie i wstawia znaknagrać do bazy danych. Drugie zapytanie kończy się niepowodzeniem, ponieważ związek "orangutany" nie istnieje. Oczekuję, że rekord wstawiony przez pierwsze zapytanie zostanie usunięty z bazy danych w ramach wycofywania transakcji. Kiedy sprawdzam bazę danych po wykonaniu tego kodu, rekord pozostaje w bazie danych. Czy ktoś może wskazać mi właściwy kierunek, aby zrozumieć, dlaczego rekord nie został usunięty?

Odpowiedzi:

0 dla odpowiedzi № 1

Widziałam moją odpowiedź, gdy tylko otworzyłam pytanie, aby to sprawdzić. Dzwoniłem. Na "db" zamiast "t". Zadziałało, gdy tylko wprowadziłem tę zmianę.