私はNode.jsのためpg-promise
を使用しています、と私は、トランザクションについてのドキュメントを正しく理解していますことを確認したかったです。トランザクションを使用するときに、クエリ内に含まれるサブクエリはpg-promiseでどのように機能しますか?
は、私は次のトランザクションを実行すると言う:
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
ブロックに含まれるのですか?
ありがとうございました!あなたのパッケージはすばらしいbtwです(卑劣な言い伝えが意図されていません)。乾杯。 –
"サブクエリのようなものはありません"。まあ、サブクエリのようなものがありますが、明らかにnode-pgレベルではありません。サブクエリは、1つのクエリが別のクエリを含むSQLの構文です。 'SELECT ... FROM ... WHERE x =(SELECT ...) 'SELECT ... FROM(SELECT ..)' –
@CraigRinger私は明示的に 'ドライバの観点から'と言うように修正しました。これは私たちが議論していたものです。そのレベルとは無関係のクエリです。 –