/ / Чому вставка результатів запиту залишається в базі після відкликання транзакції? pg-обіцянка - node.js, pg-обіцянка

Чому вставка результатів запиту залишається в базі після відкликання транзакції? pg-обіцянка - node.js, pg-обіцянка

Я недавно реалізував pg-обіцянку в одному з моїх проектів і намагаюся зрозуміти, як функціонують транзакції. Я тестую з наступною функцією:

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

Я моделював цей фрагмент коду за наступним прикладом у документації 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
});

Перший запит виконується успішно і вставляє aзапис в базу даних. Другий запит не вдається, оскільки відносини "орангутани" не існують. Я очікував, що запис, вставлений першим запитом, буде вилучено з бази даних як частина відкату транзакції. Коли я перевірю базу даних після виконання цього коду, запис залишається в базі даних. Може хтось, будь ласка, вкажіть мені у правильному напрямку, щоб зрозуміти, чому запис не був вилучений?

Відповіді:

0 для відповіді № 1

Я побачив мою відповідь, як тільки я відкрив питання, щоб переглянути його. Я зателефонував. Будь-який на "db", а не "t". Він працював, як тільки я зробив цю зміну.