данных? Т.е. при чтении не обязательно реализовывать?
Транзакции работают всегда, даже если вы ими не управляете. Если вы ничего специально не делаете, то они начинаются и коммитятся некоторым способом по умолчанию. Но они есть. И для чтения тоже.
Они используются сервером абсолютно всегда.
Давайте попробую объяснить про чтения. Транзакция — это когда несколько операций делается атомарно. Если что-то делается неатомарно, значит оно просто состоит из более мелких частей, каждая из которых делается атомарно, т.е. это не транзакция, а 10 более мелких транзакций. Например, вы читаете 1 целое число. Если у вас есть гарантия, что вы прочитали число, которое в какой-то момент существовало в базе данных, значит вы прочитали это число в транзакции, и уровень изоляции был не ниже READ COMMITTED. А могло быть, например, так, что вы прочитали половину числа старую, а половину новую, и получилии гибрид, который никогда не существовал...
Почитай про уровни изоляции транзакций и какие проблемы они решают
Тоже так считал. Но почему pg_current_xact_id_if_assigned() вернёт ничего, если не было запросов, меняющих данные?
Такая транзакция считается виртуальной. https://edu.postgrespro.ru/postgresql_internals-14.pdf С. 91 и дальше
вероятно, потому что не было в записи в журнал транзакций, который хранит по сути только записи об изменениях. но это я пальцем в небо
Потому, что можэт.
И да, то, что у вас нет transaction_id — не означает, что нет транзакцыи.
Обсуждают сегодня