|
Транзакция на PL/pgSQL
|
|||
---|---|---|---|
#18+
Я написал пару SQL команд, которые должны выполняться в одной транзакции: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Если в одной из команд произошла ошибка, то все изменения должны откатиться. Как правильно написать транзакцию на PL/pgSQL? С чего начать? До этого не приходилось писать подобные вещи. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 12:15 |
|
Транзакция на PL/pgSQL
|
|||
---|---|---|---|
#18+
Wasteland Rebel Я написал пару SQL команд, которые должны выполняться в одной транзакции: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Если в одной из команд произошла ошибка, то все изменения должны откатиться. Как правильно написать транзакцию на PL/pgSQL? С чего начать? До этого не приходилось писать подобные вещи. begin; ... commit; profit. А при чем тут PL/pgSQL? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 12:21 |
|
Транзакция на PL/pgSQL
|
|||
---|---|---|---|
#18+
mefman Wasteland Rebel Я написал пару SQL команд, которые должны выполняться в одной транзакции: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Если в одной из команд произошла ошибка, то все изменения должны откатиться. Как правильно написать транзакцию на PL/pgSQL? С чего начать? До этого не приходилось писать подобные вещи. begin; ... commit; profit. А при чем тут PL/pgSQL? Я читал, что PostgreSQL не откатит изменения, если хоть в одном statement выше произойдет ошибка в блоке begin->commit без rollback. Т.е. он выполнит то, что может выполнить. И подумал, что здесь нужно что-то более сложное с применение pl/pgsql. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 12:31 |
|
Транзакция на PL/pgSQL
|
|||
---|---|---|---|
#18+
наоборот - откатит все, если хоть в одном ошибка. В этом и суть транзакции. функция (plpgsql) - всегда транзакция, насколько я помню. зы: DELETE FROM, в данном случае, можно (нужно) заменить на TRUNCATE. А для читаемости лучше так писать: Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 12:34 |
|
Транзакция на PL/pgSQL
|
|||
---|---|---|---|
#18+
tip78, Попробовал с BEGIN ... COMMIT. Если происходит ошибка, то вроде как действительно ничего не применяется. Но если ошибок не возникает, точнее не должны (так как не возникали без блока begin...commit), то получаю ошибку: Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 12:41 |
|
Транзакция на PL/pgSQL
|
|||
---|---|---|---|
#18+
значит есть ошибка ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 12:46 |
|
Транзакция на PL/pgSQL
|
|||
---|---|---|---|
#18+
tip78 значит есть ошибка Да, мой косяк был. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 13:00 |
|
Транзакция на PL/pgSQL
|
|||
---|---|---|---|
#18+
tip78, Кстати, почему TRUNCATE предпочтительнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 13:13 |
|
|
start [/forum/topic.php?fid=53&fpage=16&tid=1994220]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 263ms |
total: | 402ms |
0 / 0 |