Russian Qt Forum
Ноябрь 23, 2024, 22:48
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Базы данных
>
PostgreSQL и автоматический rollback транзакции после ошибки.
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: PostgreSQL и автоматический rollback транзакции после ошибки. (Прочитано 9834 раз)
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
PostgreSQL и автоматический rollback транзакции после ошибки.
«
:
Ноябрь 21, 2008, 21:36 »
Такая нехорошая ситуёвина. Если в пределах транзакции произошла ошибка (допустим пытаюсь дропнуть индекс, а его нет), транзакция автоматом роллбекается, что есть очень плохо. Можно как-нибудь этого избежать?
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
BaltikS
Гость
Re: PostgreSQL и автоматический rollback транзакции после ошибки.
«
Ответ #1 :
Ноябрь 21, 2008, 22:55 »
Нет, транзакция для этого и нужна, чтобы откатить целый блок. А если ошибка вызывается в одном запросе, то откатывается весь блок. Можно попробовать запрос выполнить вне транзакции или в другой транзакции.
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: PostgreSQL и автоматический rollback транзакции после ошибки.
«
Ответ #2 :
Ноябрь 21, 2008, 23:32 »
Да без базара, я САМ откачу, если нужно будет. Но делать это за меня - ппц. Предаставь, что есть куча диалогов на одну транзакцию, и в, допустим, четвертом диалоге пользователь не указывает переменную, которая не должна быть NULL, в этом месте нужно просто вывести ошибку и дать исправить,
но не откатывать транзакцию и выбивать ошибки во всех нижних диалогах.
Хотя, возможно, я что-то не так понимаю.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
BaltikS
Гость
Re: PostgreSQL и автоматический rollback транзакции после ошибки.
«
Ответ #3 :
Ноябрь 22, 2008, 00:23 »
Что то я тоже не понимаю, а нельзя ли сделать самому проверку на NULL в диалоге? А не средствами СУБД?
Я например сначала ввёл все данные во всех последовательно 4-х диалогах, а потом все данные в транзакцию запихнул без всяких ожиданий ввода...
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: PostgreSQL и автоматический rollback транзакции после ош
«
Ответ #4 :
Ноябрь 22, 2008, 14:12 »
Да придется так. Вот только код разрастется.
Вроде на firebird'е не так было, хотя утверждать не буду.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Rcus
Гость
Re: PostgreSQL и автоматический rollback транзакции после ошибки.
«
Ответ #5 :
Ноябрь 22, 2008, 17:34 »
Цитата: panter_dsd от Ноябрь 21, 2008, 21:36
Такая нехорошая ситуёвина. Если в пределах транзакции произошла ошибка (допустим пытаюсь дропнуть индекс, а его нет), транзакция автоматом роллбекается, что есть очень плохо. Можно как-нибудь этого избежать?
Ошибки с DDL запросами можно игнорировать добавлением IF [NOT] EXISTS, а DML оборачивать в PL/pgSQL функции, обрабатывая исключения в блоке EXCEPTION
и проверять код возврата в вызывающем коде
«
Последнее редактирование: Ноябрь 22, 2008, 17:35 от Rcus
»
Записан
WW
Гость
Re: PostgreSQL и автоматический rollback транзакции после ошибки.
«
Ответ #6 :
Ноябрь 22, 2008, 18:01 »
Цитата: panter_dsd от Ноябрь 21, 2008, 23:32
Да без базара, я САМ откачу, если нужно будет. Но делать это за меня - ппц. Предаставь, что есть куча диалогов на одну транзакцию, и в, допустим, четвертом диалоге пользователь не указывает переменную, которая не должна быть NULL, в этом месте нужно просто вывести ошибку и дать исправить,
но не откатывать транзакцию и выбивать ошибки во всех нижних диалогах.
Хотя, возможно, я что-то не так понимаю.
Никогда не делай диалоги в транзакции. Эт не хорошая практика.
И почитай про SAVEPOINT. Иногда помогает
Записан
panAlexey
Гипер активный житель
Offline
Сообщений: 864
Акцио ЗАРПЛАТА!!!!! :(
Re: PostgreSQL и автоматический rollback транзакции после ошибки.
«
Ответ #7 :
Ноябрь 22, 2008, 20:33 »
Цитата: WW от Ноябрь 22, 2008, 18:01
Никогда не делай диалоги в транзакции. Эт не хорошая практика.
+писот. проверенно практикой...
Записан
Win Xp SP-2, Qt4.3.4/MinGW.
http://trdm.1gb.ru/
Tonal
Гость
Re: PostgreSQL и автоматический rollback транзакции после ошибки.
«
Ответ #8 :
Ноябрь 26, 2008, 09:21 »
А ты явно управляешь транзакциями?
Может где можно сказать драйверу. чтобы не самовольничал?
Ну и в Firebird-е управление транзакциями - всегда пользовательское а что в PG я не в курсе - нужно читать доки.
Ну и про диалоги - я придерживаюсь правила, что пишущую транзакцию нужно стартовать только тогда, когда все данные уже доступны и по максиму верифицированы. Тогда они получаются короткими - соответственно гораздо меньше шансов нарваться на конфликт.
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: PostgreSQL и автоматический rollback транзакции после ошибки.
«
Ответ #9 :
Ноябрь 27, 2008, 07:22 »
Хм. Как бы объяснить... В первом диалоге сразу создается документ, его id нужен для других диалогов. Если не пользоваться транзакциями, то в код нужно добавить удаление документа, если юзверь нажал отмену. Да и не очень хорошо будет, если документ отобразиться у других юзверей пока его толком еще не создали.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Tonal
Гость
Re: PostgreSQL и автоматический rollback транзакции после ошибки.
«
Ответ #10 :
Ноябрь 28, 2008, 10:01 »
Не, ты не понял.
Я создаю в таких случаях создаю все объекты на клиенте, не трогая базу.
А вот когда нажимается финальный Save, максимально возможно валидируются все объекты, стартуется транзакция, всё скопом пишется в базу, транзакция коммитится.
Ежели вышел облом по ограничениям базы, то можно и перезапустить процесс с нужного места со всеми введёнными данными.
А с длинными транзакциями есть практически неустранимая бяка, когда товарищ, заполняющий данные, пошёл покурить и не вернулся, оставив диалог и транзакцию висеть блокируя работу остальных.
«
Последнее редактирование: Ноябрь 28, 2008, 10:04 от Tonal
»
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: PostgreSQL и автоматический rollback транзакции после ош
«
Ответ #11 :
Ноябрь 28, 2008, 12:29 »
У меня так не получится. Добавил проверку на правильность ввода перед сохранением в базу.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
WW
Гость
Re: PostgreSQL и автоматический rollback транзакции после ош
«
Ответ #12 :
Ноябрь 29, 2008, 01:13 »
Цитата: panter_dsd от Ноябрь 28, 2008, 12:29
У меня так не получится. Добавил проверку на правильность ввода перед сохранением в базу.
"Никогда не говори никогда" (с)
Уже было 1000 раз, когда кто-то просто отвлекся на тел. звонок (клиента).
И весь офис ищет этого "шалуна", т.к. работа просто встала...
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...