私は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
ブロックに含まれますか?