Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
функции и транзакции - ?
|
|||
|---|---|---|---|
|
#18+
в процедурах на T-SQL я делаю отдельную транзакцию и знаю, что большинство процедур выпорлняют некое законченное действие вне зависимости от того, откуда были вызваны. Какие рекомендации в PG? Могу ли я открывать и заканчивать транзакцию в процедуре? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 12:54 |
|
||
|
функции и транзакции - ?
|
|||
|---|---|---|---|
|
#18+
Winnipuhв процедурах на T-SQL я делаю отдельную транзакцию и знаю, что большинство процедур выпорлняют некое законченное действие вне зависимости от того, откуда были вызваны. Какие рекомендации в PG? Могу ли я открывать и заканчивать транзакцию в процедуре?В пг нет абстракции "вложенная транзакция", но она в некотором смысле адекватна использованию абстракции "точка сохранения" (на которые может откатываться текущая транзакция). Последняя есть в пг начиная с 8-ки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 13:14 |
|
||
|
функции и транзакции - ?
|
|||
|---|---|---|---|
|
#18+
4321 Winnipuhв процедурах на T-SQL я делаю отдельную транзакцию и знаю, что большинство процедур выпорлняют некое законченное действие вне зависимости от того, откуда были вызваны. Какие рекомендации в PG? Могу ли я открывать и заканчивать транзакцию в процедуре?В пг нет абстракции "вложенная транзакция", но она в некотором смысле адекватна использованию абстракции "точка сохранения" (на которые может откатываться текущая транзакция). Последняя есть в пг начиная с 8-ки. да мне и не нужны вложенные в данном случае. Вопрос - могу ли я открыть Тр в функции, и там же ее коммит или роллбэк? Т.е является ли это "хорошим тоном" в PG? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 13:19 |
|
||
|
функции и транзакции - ?
|
|||
|---|---|---|---|
|
#18+
Нет не можешь.. Транзакциями можно управлять явно с наружи путем отсылки соответсвующих комманд begin и commit/rollaback. Или же работать в режиме автокомиит- т.е. когда ты явно не стартуешь транзакцию каждый оператор (insert,update or select from procedure..) стартует свою транзакцию. и после выполнения завершает ее автоматически. Внутри процедур ты стартовать транзакцию не можешь - т.к. в связи с с тем, что я написал выше - ты уже находишся внутри транзакции. Внутри процедур можно ставить savepoint - и в случае чего возвращаться к этому состоянию ( rollback to savepoint) Но commit - нужно делать снаружи процедур.( или он сделается сразу по окончании статемента если ты не стартовал транзакцию явно).. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 13:48 |
|
||
|
функции и транзакции - ?
|
|||
|---|---|---|---|
|
#18+
Winnipuh да мне и не нужны вложенные в данном случае. Вопрос - могу ли я открыть Тр в функции, и там же ее коммит или роллбэк? Т.е является ли это "хорошим тоном" в PG?вы не поняли. Любая процедура выполняется в транзакции. В той, из которой вызвана. Т.ч. никакой внутренней транзакции невозможно. Транзакцию можно вызвать явно, и тогда все,что выполняется внутри до коммита или роллбака выполняется внутри нее. "Нарезание этой глобальной транзакции на кусочки, которые можно отменять по частям" - это и есть то, для чего объявляются "внутренние транзакции" ("вложенные", а не "автономные") или "сейвпойнты" - кажд. - в своей модели абстракций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 13:59 |
|
||
|
функции и транзакции - ?
|
|||
|---|---|---|---|
|
#18+
4321 Winnipuh да мне и не нужны вложенные в данном случае. Вопрос - могу ли я открыть Тр в функции, и там же ее коммит или роллбэк? Т.е является ли это "хорошим тоном" в PG?вы не поняли. Любая процедура выполняется в транзакции. В той, из которой вызвана. Т.ч. никакой внутренней транзакции невозможно. Транзакцию можно вызвать явно, и тогда все,что выполняется внутри до коммита или роллбака выполняется внутри нее. "Нарезание этой глобальной транзакции на кусочки, которые можно отменять по частям" - это и есть то, для чего объявляются "внутренние транзакции" ("вложенные", а не "автономные") или "сейвпойнты" - кажд. - в своей модели абстракций. я понял, просто небольшой разнобой в терминологии. пример, как у меня сейчас в приложении (через OLEDB) для mssqlserver. Приложение хочет скопировать некий объект в базе, делается вызов процедуры, в ней begin tran ... копирование ... commit / rollback. Т.е. внутри приложения я не использую открытие транзакции, закрытие. Я адаптирую приложение для работы с ПГ. Теперь мне надо будет в приложении делать явно открытие транзакции, вызов функции копирования объекта, и явное закрытие. Так получается?... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 14:09 |
|
||
|
функции и транзакции - ?
|
|||
|---|---|---|---|
|
#18+
Если оформить всю вашу логику в виде единой процедуры и из приложения явно не стартовать транзакцию ( begin ) то если процедура не выдала ошибки по завершении ее работы автоматом призойдет commit. Вместо ролбака - генерируй исключение - и еслиисключение не отлавливать внутри процедуры - то автомвтом все откатится.. Явно транзакции стартуй только если тебе надо сделать два или больше статемента последовательно. Иначе работай в автокоммит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 14:24 |
|
||
|
функции и транзакции - ?
|
|||
|---|---|---|---|
|
#18+
domanixЕсли оформить всю вашу логику в виде единой процедуры и из приложения явно не стартовать транзакцию ( begin ) то если процедура не выдала ошибки по завершении ее работы автоматом призойдет commit. Вместо ролбака - генерируй исключение - и еслиисключение не отлавливать внутри процедуры - то автомвтом все откатится.. Явно транзакции стартуй только если тебе надо сделать два или больше статемента последовательно. Иначе работай в автокоммит. о, уже полегче. Т.е. если у меня в batch только вызов одной функции, то практически она и будет выполняться в собственной транзакции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 14:30 |
|
||
|
функции и транзакции - ?
|
|||
|---|---|---|---|
|
#18+
Winnipuh Т.е. если у меня в batch только вызов одной функции, то практически она и будет выполняться в собственной транзакции?в транзакции селекта или иного стейтмента, если не заявлена явно (или отменой автокоммит моды) транзакция на больший batch. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 16:07 |
|
||
|
функции и транзакции - ?
|
|||
|---|---|---|---|
|
#18+
4321 в транзакции селекта или иного стейтментаиз которого вызвана. Т.к. иного вызова, как вызов в стейтменте не предусмотрен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 16:08 |
|
||
|
функции и транзакции - ?
|
|||
|---|---|---|---|
|
#18+
Еще вопрос!!!! Нужно в одной транзакции выполнить 2 малозависимые процедуры шлем с клиента BEGIN TRANSACTION ; шлем с клиента SELECT * MyProcedure1 () шлем с клиента SELECT * MyProcedure2 () шлем с клиента COMMIT; Верно ли в такой подаче, что = если не выполнится корректно MyProcedure2 то транзакция сама откатится??? Мне кажется что нужно как-то отлавливать неверное выполнение процедур, дабы корректно завершить внешнюю транзакцию, может подскажете на примере как это делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 11:17 |
|
||
|
функции и транзакции - ?
|
|||
|---|---|---|---|
|
#18+
Да если в MyProcedure2 произошла ошибка - и эта ошибка внутри процедуры не перехватывается- то транзакция автоматом откатится на момент старта begin. Если эти процедуры не взаимозависимы - то 2 путя решения проблемы. 1 не выполнять в одном блоке транзакции , а запускать в режиме автокоммит - тогда ошибка во второй процедуре откатит только то что она сама натворила. Eсли же это по какимто причинам не приемлимо - то тогда внутри процедур ставь отлов ошибок и сам разруливай что в этом случае делать.. напоминаю как в pgplsql отлаваливать ошибки Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 36.7.5. Trapping Errors ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 13:15 |
|
||
|
функции и транзакции - ?
|
|||
|---|---|---|---|
|
#18+
спасибо! буду копать... На самом деле нужно чтобы либо обе либо ниодна... есть просто опасение такое - 1-я выполнилась (коннект через ОДБС) коннект пропал = 2-я не выполнилась.. и получится недоделка так как эти процедуры пишут в разные таблицы, + 2-я пишет в свою таблицу несколько раз.... надеюсь что обрыва быть не должно но мало ли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 16:07 |
|
||
|
функции и транзакции - ?
|
|||
|---|---|---|---|
|
#18+
Не опасайся. На то и придумали транзакции чтобы либо все операции, инициированные внутри транзакции выполнились - лобо ни одной. Как только сервер определит, что произошел обрыв связи с клиентом - он сразу выполнит откат текущей транзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 16:13 |
|
||
|
функции и транзакции - ?
|
|||
|---|---|---|---|
|
#18+
читал, но так и не понял. Могу ли я, вызывая функцию указать желаемый тип транзакции? Хотелось бы указать Read committed вместо обычного Serializable. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2008, 16:57 |
|
||
|
функции и транзакции - ?
|
|||
|---|---|---|---|
|
#18+
tadminчитал, но так и не понял. Могу ли я, вызывая функцию указать желаемый тип транзакции? Хотелось бы указать Read committed вместо обычного Serializable. Код: plaintext 1. 2. 3. 4. В версии 8.3 можно при создании функции задать default_transaction_isolation. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2008, 22:29 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=33873914&tid=2004704]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
83ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
| others: | 246ms |
| total: | 415ms |

| 0 / 0 |
