https://node-postgres.com/features/transactions Я попытался реализовать некоторые API-интерфейсы транзакций для моего проекта с использованием pg, следуя приведенной выше документации. Но одна вещь всплывает у меня из головы, может ли одно соединение (клиент) проводить две транзакции параллельно?
Например, я создаю одну транзакцию по запросу ('BEGIN'), и в этой транзакции у меня будет PromiseChain1, где на каждом шаге будет выполняться sql. последний шаг - выполнить запрос ('COMMIT') и перехватить (err => query ('ROLLBACK'))
псевдокод: BEGIN.then (SQL1_1) .then (SQL1_2) .then (SQL1_3) .then (COMMIT) .catch (ROLLBACK)
И я снова создам еще одну транзакцию по запросу ('BEGIN'), и, как и в предыдущей, будет создана еще одна PromiseChain2, аналогичная предыдущей. псевдокод: BEGIN.then (SQL2_1) .then (SQL2_2) .then (COMMIT) .catch (ROLLBACK)
Последнее, что я сделаю, это вызову Promise.all ([promiseChain1, promChain2]). Then (...)
в зависимости от времени выполнения каждого оператора sql порядок двух BEGIN, двух COMMIT / ROLLBACK и других операторов sql из обеих цепочек может быть случайным, верно?
BEGIN SQL1_1 BEGIN SQL1_2 SQL2_1 SQL2_2 COMMIT SQL1_3 ROLLBACK
Но поскольку две «транзакции» фактически используют одно и то же соединение, я думаю, что результат будет сильно отличаться от того, что я ожидал.
Может ли кто-нибудь уточнить, будет ли это проблемой, используя концепцию транзакции pg с цепочкой обещаний и всем остальным?