Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Транзакции / 10 сообщений из 10, страница 1 из 1
08.06.2008, 00:03
    #35362731
Сергей Фролов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции
Возможно несколько глупый вопрос, но я толком Pg еще не использовал, буквально только что скачал.
Подскажите, плиз, как происходит работа с транзакциями в Pg?
Я имею в виду вот что: много лет работаю с Firebird и там, как правило, используются минимум две транзакции на клиенте - одна читающая, которая не нагружает сервер версиями записей, а другая (короткая) пишущая. А как у вас?
...
Рейтинг: 0 / 0
08.06.2008, 01:18
    #35362812
Dan Black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции
У нас бизнес-логика реализована на ХП, поэтому не заморачиваемся с типом транзакции. Сколько надо столько и происходит изменение данных (в разумных приделах, конечно). Главное, чтобы целостность базы была в порядке.
Единственно, чем может быть полезна, по-моему, только читающая транзакция, так это то тем, что счетчик номера транзакции не увеличивается (хотя это, вроде, только обещают сделать в 8.4)

Правильно ли я понял, что для реализации какой-то одной логической функции используются две транзакции? Или даже больше транзакций?

Код: plaintext
1.
----------------------------
 Verba volent, scripta manent 
...
Рейтинг: 0 / 0
08.06.2008, 01:44
    #35362827
Сергей Фролов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции
Dan BlackПравильно ли я понял, что для реализации какой-то одной логической функции используются две транзакции? Или даже больше транзакций?
Попробую объяснить, суть примерно такая, если перейти на GUI:

- есть грид с данными select'а в одной читающей транзакции с параметром read commited
- пользователь добавляет/изменяет/удаляет данные, но вот insert/update/delete происходят уже в совершенно другой транзакции, которая никак не связана на первой
- для изменения обновленных данных в гриде или выполняется refresh текущей записи с сервера.

Схема упрощенная, но, надеюсь, понятная.
...
Рейтинг: 0 / 0
08.06.2008, 02:22
    #35362841
Dan Black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции
А зачем может понадобиться два этих разных действия делать в одной транзакции?
Код: plaintext
1.
----------------------------
 Verba volent, scripta manent 
...
Рейтинг: 0 / 0
08.06.2008, 02:33
    #35362844
Сергей Фролов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции
Dan BlackА зачем может понадобиться два этих разных действия делать в одной транзакции?
Т.е., если я правильно понял, то идеология такая же?

В одной транзакции, если мне не изменяет память в основном с MS SQL работают, но могу ошибиться, ибо не трогал его с 2002 года.
...
Рейтинг: 0 / 0
08.06.2008, 02:38
    #35362845
Dan Black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции
Сергей ФроловТ.е., если я правильно понял, то идеология такая же?
Вообще, уже довольно поздно, и я, наверное, чего-то не допонимаю. Завтра народ проснётся и что-нибудь да напишет ;)
...
Рейтинг: 0 / 0
08.06.2008, 08:44
    #35362868
Andrey Daeron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции
Сергей ФроловВозможно несколько глупый вопрос, но я толком Pg еще не использовал, буквально только что скачал.
Подскажите, плиз, как происходит работа с транзакциями в Pg?
Я имею в виду вот что: много лет работаю с Firebird и там, как правило, используются минимум две транзакции на клиенте - одна читающая, которая не нагружает сервер версиями записей, а другая (короткая) пишущая. А как у вас?
1. С 8.3 читающие транзакции не трогают счетчик транзакции.
2. ИМХО транзакция читающая пока не начала писать , т.е. это автоматическая фича.
3. ИМХО можно спокойно всё делать в одной транзакции, и ничего страшного не будет, ни замедления ни ускорения (как минимум заметного).

Что-то новое стоит писать на 8.3, ибо переходить всё равно прийдётся, а 8.3 достаточно стабильная.
...
Рейтинг: 0 / 0
08.06.2008, 14:56
    #35363037
Ёш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции
можно ещё принудительно запретить транзакции становиться пишущей если начинать её с
Код: plaintext
begin read only;
тогда при попытке стать пишущей будет ошибка:
Код: plaintext
ERROR:  транзакция установлена "только для чтения"


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
08.06.2008, 16:46
    #35363121
domanix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции
важно понимать, что в отличии от firebird, который позволяет в рамках одного соединения открывать несколько транзакций - postgres может открывать только одну транзакцию в соединении.
т.е. чтобы реализовать модель поведения такуюже как описано выше - нужно держать два соединения с постгресом. Также нужно понимать, что клиентская библиотека firebird автоматом преобразует комманды select в курсор и фетчит записи оттуда по мере необходимости приложению.. В постгресе для такого рода поведения нужно явно писать open cursor ..., в последующими коммандами fetch from cursor, если в постгресе просто отослать комманду select то на клиента вернется Весь получившийся набор данных.. Я к тому, что реализовать уже привычную вам архитектуру приложения для FB на PG будет непросто..( нетривиально?).
Еще также есть другие засады. К примеру - FB управляет транзакциями только с клиента . Т.е. завершить транзакцию можно только послав комманду с клиента. Что позволяет реализовать следущую модель поведения :
Старт транзакции
выполнить комманду 1.
выполнить комманду 2 ( происходит ошибка - транзакция не откатывается,
откатывается только результаты работы комманды 2)
commit.

В результате в базе зафиксируется результат выполнения комманды 1.
В PG - же все по другому.
в момент возникновения ошибки,
когда выполняется комманды 2 - отактится ВСЯ транзакция.

Это естетсвенно заставляет пересмотреть сложившиеся привычки - которые закреплены у вас в результате опыта работы с Fb. Так что резюмирую..
для ПГ вам придется попотеть чтобы переделать приложения с учетом его особенностей...
...
Рейтинг: 0 / 0
08.06.2008, 18:13
    #35363163
Сергей Фролов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции
domanix, спасибо. Более/менее стало понятно.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Транзакции / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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