powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Точки сохранения...
6 сообщений из 6, страница 1 из 1
Точки сохранения...
    #33886249
IgorNK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...ни у кого не испортились в 8.1.4?
Поставил обычный savepoint и получил внутр. ошибку с кодом XX000:
ERROR: SPI_execute_plan failed executing query "savepoint my_savepoint": SPI_ERROR_TRANSACTION

Попытался обмануть, вынес "откатную" часть в отдельную функцию. Соответственно внутри получился rollback не на точку, а на всю субпроцедуру. Но PostgreSQL тоже не дурак оказался и выдал следующее:
ERROR: SPI_execute_plan failed executing query "rollback": SPI_ERROR_TRANSACTION

Короче, откат заработал только через искусственный exception . То есть сам по себе механизм действует, но в извратной форме.
...
Рейтинг: 0 / 0
Точки сохранения...
    #34090425
autocommit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сегодня столкнулся с такойже проблемой :( можно поподробнее способ решения данной проблемы
...
Рейтинг: 0 / 0
Точки сохранения...
    #34090658
.gc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.gc
Гость
http://developer.postgresql.org/pgdocs/postgres/plpgsql-control-structures.htmlPLPGSQL-ERROR-TRAPPING
Код: plaintext
1.
2.
3.
4.
5.
		case SPI_ERROR_TRANSACTION:
				ereport(ERROR,
						(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
					 errmsg("cannot begin/end transactions in PL/pgSQL"),
						 errhint("Use a BEGIN block with an EXCEPTION clause instead.")));
http://www.google.com/codesearch?q=+SPI_ERROR_TRANSACTION+show:apGSx7WA4tY:WPH_ZsWst7Y:MNZMxlOjwkc&sa=N&cd=6&ct=rc&cs_p=http://distfiles.master.finkmirrors.net/postgresql-8.0.3.tar.bz2&cs_f=postgresql-8.0.3/src/pl/plpgsql/src/pl_exec.c#a0
...
Рейтинг: 0 / 0
Точки сохранения...
    #34091423
autocommit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо. только одна проблемка я не сишник :(
...
Рейтинг: 0 / 0
Точки сохранения...
    #34091678
.gc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.gc
Гость
гм, причем тут сишник-не сишник...
вторая ссылка - это была подсказка, на то как обойти SPI_ERROR_TRANSACTION, а первая ссылка
была на указания по работе с исключениями.


простой пример для имитации rollback:
Код: 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.
25.
26.
27.
28.
29.
create table tr01 (id serial, data text);

-- это не будет работать, вывалит ошибку типа 
-- ERROR:  SPI_execute_plan failed executing query "SAVEPOINT my_savepoint": SPI_ERROR_TRANSACTION
create or replace function tr_rlbk_01(_data text) returns bigint as $$
DECLARE _unused_id INT;
BEGIN
 SAVEPOINT my_savepoint;
 INSERT INTO tr01 (data) values (_data);
 _unused_id := currval('tr01_id_seq');
 ROLLBACK TO my_savepoint;
 RETURN _unused_id;
END$$ language 'plpgsql';
select tr_rlbk_01('Darn!');

-- трюк через использование EXCEPTION:
create or replace function tr_rlbk_02(_data text) returns bigint as $$
DECLARE _unused_id INT;
BEGIN
 INSERT INTO tr01 (data) values (_data);
 _unused_id := currval('tr01_id_seq');
 RAISE EXCEPTION 'rollbacking...';
EXCEPTION
 WHEN RAISE_EXCEPTION THEN -- отлов исключений порожденных именно через RAISE EXCEPTION
 RAISE NOTICE 'exception raised';
 RETURN _unused_id;
END$$ language 'plpgsql';
select tr_rlbk_02('Darn!'); -- работает


Мораль следующая (упрощенно): блок BEGIN ... EXCEPTION .. END в pl/pgsql при выполнении заворачивается в sub-transaction. Успешное выполнении - экв. RELEASE SAVEPOINT, исключение в ходе выполнения - экв. ROLLBACK TO SAVEPOINT.
...
Рейтинг: 0 / 0
Точки сохранения...
    #34091978
autocommit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все вьехал ! прошу прощения за тупость :)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Точки сохранения...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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