snpe <[EMAIL PROTECTED]> writes: > When I call DECLARE CURSOR out of transaction command success, > but cursor is not created > Reference manual say that this get error : > ERROR: DECLARE CURSOR may only be used in begin/end transaction blocks
Oops. I removed that test on 21-Oct as part of this fix: 2002-10-21 18:06 tgl * src/: backend/access/transam/xact.c, backend/catalog/heap.c, backend/catalog/index.c, backend/commands/dbcommands.c, backend/commands/indexcmds.c, backend/commands/tablecmds.c, backend/commands/vacuum.c, backend/parser/analyze.c, include/access/xact.h: Fix places that were using IsTransactionBlock() as an (inadequate) check that they'd get to commit immediately on finishing. There's now a centralized routine PreventTransactionChain() that implements the necessary tests. My reasons for removing it were (a) it was in the wrong place (analyze.c is not the right place to test execution-time constraints), and (b) it was the wrong test: the test as written was just IsTransactionBlock(), which is wrong in the case of autocommit-off, since a DECLARE CURSOR will start a new transaction perfectly well. Another objection is that inside a function call, it ought to be legal to do DECLARE CURSOR even if we're not in a transaction block, since the function might intend to use the cursor itself before returning. I think I had intended to put together an alternative test that only complained about interactive DECLARE CURSOR and understood about autocommit, but I forgot. At this point we can either add the fixed-up error check (meaning RC1 won't be the release after all), or change the documentation. Comments? regards, tom lane ---------------------------(end of broadcast)--------------------------- TIP 2: you can get off all lists at once with the unregister command (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])