172 похожих чатов

Кстати Коллеги, а можно нубский вопрос? а возможны вообще долгоживущие транзакции, хотя

бы в теории?

стартовал - получил id транзакции
делаешь что-то в ней
закоммитил, указав id

не привязанные к коннекту?

18 ответов

16 просмотров

Транзакция всегда в коннекте существует, иначе никак. А долгоживущая может быть, но такие подходы бьют по перформанса

doc
Транзакция всегда в коннекте существует, иначе ник...

Если-бы вы были хоть на секунду правы, то в pg_stat_activity (или как оно там) на всех коннектах, которые сейчас не делают ничего было-бы idle in transaction и база умерла-бы (так как idle in transaction это самое плохое что может быть для Пг).

Two phase commit ближе всего по смыслу, но он не для того.

а это разве не сломает ACID?

А как тогда гарантировать СУБД что вы не начнете параллельно кучей потоков что-то с одним id делать с недетерминированным конечным результатом? Тут тогда придется транзакции внутри транзакции пилить.

Пока что ваше пожелание ничем ни отличается от "стартовал — открыл соединение + открыл транзакцию, висишь idle in transaction, закоммитил и закрыл соединение". В чём будет положительная разница для пользователя? P.S. Если вы скажете "не надо открывать соединение", то я попрошу расписать плюсы этого и т.д. пока не скажете очень конкретные плюсы

alex che
Пока что ваше пожелание ничем ни отличается от "ст...

Что-то подобное на первый, наивный, взгляд хорошо для банковских транзакций, например, выдача денег в банкомате которая может и на минуту растянуться и держать соединение ради этого банкомата никто не будет. Правда чуть позже увидишь, что нужно несколько коротких транзакций и журналирование каждого действия.

Евгений Смирнов
Что-то подобное на первый, наивный, взгляд хорошо ...

почему для сервера банка проблема держать соединение одну минуту?

Да, можно, это даже на практике делают. Почитайте про saga.

Евгений Смирнов
Что-то подобное на первый, наивный, взгляд хорошо ...

"Разрешэние" выдать деньги (блокировка средств на счёте) должна быть отдельной транзакцыей, фиксацыя выдачи или отмены — тожэ. И да, у этого разрешэния надо, конечно, пркдусмотреть средства синхронизацыи с цэнтром: откат тех, которые нк дошли так или иначе (в т.ч. не дошло разрешэние), накат тех, у которых после успешного разрешэния не дошло подтверждение выдачи.

Ilya Anfimov
"Разрешэние" выдать деньги (блокировка средств на ...

Именно, куча мелких транзакций + журнал всего произошедшего.

doc
а в чем я не прав-то?

Я там и написал.

Warstone
Я там и написал.

я прочитал, но не понял в чем конкретно я не прав

doc
я прочитал, но не понял в чем конкретно я не прав

В фразе что "транзакции всегда в коннекте существуют". Это неправда.

Евгений Смирнов
Что-то подобное на первый, наивный, взгляд хорошо ...

Вы ответили на вопрос "зачем это нужно?", а я спрашивал "какое конкретно преимущество вы ожидаете по сравнению с открыть отдельное соединение для длительной транзакции?". Вам может быть очевидно, а мне не очевидно. Это нужно для ответа на исходный вопрос "можно ли такое поддержать в PG?". Чтобы на него ответить, нужно знать не название фичи, а какие плюсы ожидаются. Например, "мультимастер" — это просто слово, можно реализовать формально "мультимастер", при этом пользователь не получит плюшек, которые на самом деле хотел.

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта