powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Не работают SAVEPOINT
5 сообщений из 5, страница 1 из 1
Не работают SAVEPOINT
    #35561673
SeniorAndre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть код на Delphi (его можно реализовать на любом другом языке где есть try секции)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  dmMain.QueryExecute('BEGIN TRANSACTION');
  dmMain.QueryExecute('SAVEPOINT A1');
  dmMain.QueryExecute('SAVEPOINT A2');
  try
    try
        dmMain.QueryExecute('SELECT 1/0');
        dmMain.QueryExecute('SAVEPOINT A3');
    except
        dmMain.QueryExecute('ROLLBACK TO SAVEPOINT A2');
    end;
  finally
    dmMain.QueryExecute('COMMIT TRANSACTION');
  end;

После любой ошибки (в примере это деление на 0) пропадают все SAVEPOINT и на
команду "ROLLBACK TO SAVEPOINT A2" выдаётся ошибка "ERROR: SAVEPOINT can only be used in transaction blocks;Error while executing the query"

Хотя по факту последний 'COMMIT TRANSACTION' проходит, что говорит что транзакция есть.... :(
Причём такое впечателение что пропали все SAVEPOINT, когда except в бд не происходит, то все ROLLBACK работают!!!
...
Рейтинг: 0 / 0
Не работают SAVEPOINT
    #35561678
SeniorAndre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл.... Версия PG 8.3.3, операционка Win2k
...
Рейтинг: 0 / 0
Не работают SAVEPOINT
    #35561816
SeniorAndre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если последовательно запускать операции в PgAdmin, то ситуация почти сходная после ошибки откатывается вся транзакция...
BEGIN TRANSACTION;
SAVEPOINT A1;
SAVEPOINT A2;
SELECT 1/0;
SAVEPOINT A3;
ROLLBACK TO SAVEPOINT A2;
COMMIT TRANSACTION;
...
Рейтинг: 0 / 0
Не работают SAVEPOINT
    #35561940
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня не откатывается. pg 8.3.3 Debian

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
seb=> BEGIN TRANSACTION;
BEGIN
Время:  0 , 172  мс
seb=> SAVEPOINT A1;
SAVEPOINT
Время:  0 , 097  мс
seb=> SAVEPOINT A2;
SAVEPOINT
Время:  0 , 071  мс
seb=> SELECT  1 / 0 ;
ERROR:  деление на ноль
seb=> SAVEPOINT A3;
ERROR:  current transaction is aborted, commands ignored until end of transaction block
 угу, потому что после ошибки в транзакции единственная команда
 которую можно выполнить - это commit/rollback
seb=> ROLLBACK TO SAVEPOINT A2;
ROLLBACK
Время:  0 , 086  мс
 вернулись в точку A2 причём сам SAVEPOINT A2 удалился автоматически
 но мы тем не менее всё ещё в транзакции
seb=> COMMIT TRANSACTION;
COMMIT
Время:  0 , 188  мс
 успешный комит, как будто ошибки не было

у Вас в PgAdmin не так ?

ps: про Delphi ничего не могу сказать, видимо это какая-то проблема в Delphi


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
Не работают SAVEPOINT
    #35561961
SeniorAndre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашли казачка... им оказался ODBC драйвер, у него по умолчанию стоит Level rollback on error ='Transaction', поставили 'Nop' и всё заработало..., всем спасибо.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Не работают SAVEPOINT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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