Я использую pg-promise
для node.js и хотел убедиться, что правильно понимаю документацию о транзакциях.
Скажем, я выполнил следующую транзакцию:
db.tx(function(t) {
t.any('SELECT * FROM users')
.then(function(users) {
var queries = [];
for (var i =0; i < users.length; i++) {
queries.push(t.any("INSERT INTO stocks_owned (ticker, shares, user_id) VALUES ('GOOG', 10, $1)", users[i].user_id));
}
return t.batch(queries);
})
})
Какие запросы postgres это в конечном итоге будет выполнять?
Будет ли транзакция postgres:
BEGIN;
SELECT * FROM users;
SAVEPOINT my_savepoint;
INSERT INTO stocks_owned (ticker, shares, user_id) VALUES ('GOOG', 10, 1);
INSERT INTO stocks_owned (ticker, shares, user_id) VALUES ('GOOG', 10, 2);
...
INSERT INTO stocks_owned (ticker, shares, user_id) VALUES ('GOOG', 10, 999);
COMMIT;
Другими словами, включаются ли подзапросы, содержащиеся в других запросах, в один и тот же блок BEGIN/COMMIT
?