Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Точки сохранения... / 6 сообщений из 6, страница 1 из 1
28.07.2006, 18:23
    #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
30.10.2006, 11:31
    #34090425
autocommit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точки сохранения...
сегодня столкнулся с такойже проблемой :( можно поподробнее способ решения данной проблемы
...
Рейтинг: 0 / 0
30.10.2006, 12:22
    #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
30.10.2006, 15:03
    #34091423
autocommit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точки сохранения...
спасибо. только одна проблемка я не сишник :(
...
Рейтинг: 0 / 0
30.10.2006, 15:54
    #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
30.10.2006, 17:04
    #34091978
autocommit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точки сохранения...
все вьехал ! прошу прощения за тупость :)
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Точки сохранения... / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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