[ psqlodbc-Bugs-1000498 ] rollback to savepoint in case of error
От | |
---|---|
Тема | [ psqlodbc-Bugs-1000498 ] rollback to savepoint in case of error |
Дата | |
Msg-id | 20051221141957.706BC1125010@pgfoundry.org обсуждение исходный текст |
Список | pgsql-odbc |
Bugs item #1000498, was opened at 2005-12-21 14:19 You can respond by visiting: http://pgfoundry.org/tracker/?func=detail&atid=538&aid=1000498&group_id=1000125 Category: None Group: None Status: Open Resolution: None Priority: 3 Submitted By: Tom Zschockelt (toz) Assigned to: Nobody (None) Summary: rollback to savepoint in case of error Initial Comment: the current snapshot driver only supports manual rollback to savepoints if ( and only if ) all previous statements return with success. e.g. My env : win2003 server 8.1.0 postgresql psqlodbc 8.01.0105 CREATE TABLE testtable ( f1 int2 primary key, f2 varchar(10) null); the following snippet works BEGIN INSERT INTO testtable values ( 12, 'hello'); SAVEPOINT SP_INSERT; INSERT INTO testtable values ( 13, 'hello1'); ROLLBACK TO SAVEPOINT SP_INSERT; INSERT INTO testtable values ( 13, 'hello123'); COMMIT; the following snippet don't work BEGIN INSERT INTO testtable values ( 12, 'hello'); SAVEPOINT SP_INSERT; INSERT INTO testtable values ( 12, 'hello1'); <-- auto rollback occurs !!! ROLLBACK TO SAVEPOINT SP_INSERT; INSERT INTO testtable values ( 13, 'hello123'); COMMIT; Why does an error breaks the savepoint environment ? By now I used an application side workaround as I do an select before each insert to check if a certain row already exists in the table. If it exist I try an update on the row. ( but this is a real performance killer ... ) ---------------------------------------------------------------------- You can respond by visiting: http://pgfoundry.org/tracker/?func=detail&atid=538&aid=1000498&group_id=1000125
В списке pgsql-odbc по дате отправления: