every SQL statement as being executed within a transaction. If you do not issue a BEGIN command, then each individual statement has an implicit BEGIN and (if successful) COMMIT wrapped around it. A group of statements surrounded by BEGIN and COMMIT is sometimes called a transaction block.Some client libraries issue BEGIN and COMMIT commands automatically, so that you might get the effect of transaction blocks without asking. Check the documentation for the interface you are using.
При этом в примерах JDBC -драйвера с выключенным autoCommit никто не делает никаких коммитов. https://jdbc.postgresql.org/documentation/head/query.html
Значит ли это, что, взяв из пула коннект, я могу сделать на нем 1000 селектов (без ручного коммита) и 1 апдейт (с ручным коммитом), и у меня не будет ситуации, когда на первом селекте началась транзакция, а закончилась только на апдейте?
А мне больше интересно, как вот это (в https://jdbc.postgresql.org/documentation/head/query.html) > The Connection must not be in autocommit mode. The backend closes cursors at the end of transactions, so in autocommit mode the backend will have closed the cursor before anything can be fetched from it. вяжется с докой setAutoCommit(): > The commit occurs when the statement completes. The time when the statement completes depends on the type of SQL Statement: > For Select statements, the statement is complete when the associated result set is closed.
Обсуждают сегодня