powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Транзакция коммитится только при разрыве соединения
1 сообщений из 1, страница 1 из 1
Транзакция коммитится только при разрыве соединения
    #38508213
Vasonik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При разборе ошибок в логе Postgres 9.1.3 обнаружил, что в некоторых случаях транзакция реально коммитится только в момент диссконнекта, а не тогда, когда клиент говорит COMMIT.
Соединение происходит через ZeosDB.
Как такое может быть?

Ниже пример лога, иллюстрирующий сказанное
Код: sql
1.
2.
3.
13:25:16.275 GST  (1405) 6264 idleLOG:  statement: BEGIN
13:25:16.290 GST  (1405) 6264 idle in transactionLOG:  statement: SET TRANSACTION ISOLATION LEVEL READ COMMITTED
13:25:17.072 GST  (1405) 6264 idle in transactionLOG:  statement: select last_crc as res  from reply_nodes   where gpers_user_id = 178


Получили last_crc = 985398385
Код: sql
1.
13:25:17.087 GST  (1405) 6264 idle in transactionLOG:  statement: COMMIT


Меняем значение last_crc на 1725194500, комитим
Код: sql
1.
2.
3.
4.
13:25:27.697 GST (1405) 6264 idleLOG:  statement: BEGIN
13:25:27.728 GST (1405) 6264 idle in transactionLOG:  statement: SET TRANSACTION ISOLATION LEVEL READ COMMITTED
13:26:35.556 GST (1405) 6264 idle in transactionLOG:  statement: update reply_nodes set last_crc = 1725194500 where gpers_user_id = 178
13:26:35.572 GST (1405) 6264 idle in transactionLOG:  statement: COMMIT


Читаем значение last_crc
Код: sql
1.
2.
3.
4.
13:30:33.556 GST (18780) 6876 authenticationLOG:  connection authorized:
13:30:33.634 GST (18780) 6876 idleLOG:  statement: BEGIN
13:30:33.650 GST (18780) 6876 idle in transactionLOG:  statement: SET TRANSACTION ISOLATION LEVEL READ COMMITTED
13:30:34.415 GST (18780) 6876 idle in transactionLOG:  statement: select last_crc as res  from reply_nodes   where gpers_user_id = 178


Получили last_crc = 985398385, значение, которое было до коммита
Код: sql
1.
13:30:34.447 GST (18780) 6876 idle in transactionLOG:  statement: COMMIT


У клиента оборвалось соединение
Код: sql
1.
2.
3.
4.
13:33:32.072 GST (1405) 6264 idleLOG:  could not send data to client: No connection could be made because the target machine actively refused it.
13:33:32.072 GST (1405) 6264 idleLOG:  could not receive data from client: No connection could be made because the target machine actively refused it.
13:33:32.072 GST (1405) 6264 idleLOG:  unexpected EOF on client connection
13:33:32.072 GST (1405) 6264 idleLOG:  disconnection: session time: 0:08:15.969


Читаем значение last_crc
Код: sql
1.
2.
3.
13:33:41.181 GST (22857) 7872 idleLOG:  statement: BEGIN
13:33:41.197 GST (22857) 7872 idle in transactionLOG:  statement: SET TRANSACTION ISOLATION LEVEL READ COMMITTED
13:33:41.931 GST (22857) 7872 idle in transactionLOG:  statement: select last_crc as res  from reply_nodes   where gpers_user_id = 178


Получили 1725194500, закоммитившееся только после разрыва соединения
Код: sql
1.
13:33:41.978 GST (22857) 7872 idle in transactionLOG:  statement: COMMIT
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Транзакция коммитится только при разрыве соединения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]