Thread: Transactions within a function
Do the BEGIN and END in a function also indicate that it is done in a transaction?
Or can you put another BEGIN TRANSACTION; END TRANSACTION; in there?
---
Daniel Åkerud
Daniel Åkerud
[ Don't underestimate the power of stupid people in large groups]
Daniel Åkerud wrote: > Do the BEGIN and END in a function also indicate that it is done in a transaction? > Or can you put another BEGIN TRANSACTION; END TRANSACTION; in there? The BEGIN and END keywords in PL/pgSQL have absolutely no transactional meaning. They group statements into blocks with the possibility of named blocks using the <<label>> syntax and then beeing able to EXIT up multiple block levels at once. Since every SQL statement sent to the backend outside of an explicit transaction block has it's own implicit transaction and we don't have subtransactions yet, there is no possibility for transaction control inside of functions. Jan -- #======================================================================# # It's easier to get forgiveness for being wrong than for being right. # # Let's break this rule - forgive me. # #================================================== JanWieck@Yahoo.com # _________________________________________________________ Do You Yahoo!? Get your free @yahoo.com address at http://mail.yahoo.com
Daniel �kerud <zilch@home.se> writes: > Do the BEGIN and END in a function also indicate that it is done in a > transaction? Or can you put another BEGIN TRANSACTION; END > TRANSACTION; in there? Please don't post in HTML. A function is always executed within a transaction--either an explicit one (where the user issues BEGIN TRANSACTION) or the implicit transaction created by issuing a single SQL statememt. Since PG doesn't allow nested transactions, you can't have a transaction inside a function. -Doug -- The rain man gave me two cures; he said jump right in, The first was Texas medicine--the second was just railroad gin, And like a fool I mixed them, and it strangled up my mind, Now people just get uglier, and I got no sense of time... --Dylan
Does anyone know if it is possible to connect to a differernt db from within a plsql function.
I have multilple inter-related schemas and want to enforce some fk relationships.
Thanks,
Morgan
I have multilple inter-related schemas and want to enforce some fk relationships.
Thanks,
Morgan
On Fri, 6 Jul 2001, [iso-8859-1] Daniel �kerud wrote: > Do the BEGIN and END in a function also indicate that it is done in a > transaction? Or can you put another BEGIN TRANSACTION; END > TRANSACTION; in there? No. Functions cannot start/stop transactions, as postgresql does not currently support nested transactions. BEGIN/END are pascalish/adaish things identical to { and } in C. -alex
Morgan Curley writes: > Does anyone know if it is possible to connect to a differernt db from > within a plsql function. > I have multilple inter-related schemas and want to enforce some fk > relationships. Not possible -- Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter
Daniel Åkerud writes: > Do the BEGIN and END in a function also indicate that it is done in a transaction? No. > Or can you put another BEGIN TRANSACTION; END TRANSACTION; in there? No. -- Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter
Morgan Curley wrote: > Does anyone know if it is possible to connect to a differernt db from > within a plsql function. > I have multilple inter-related schemas and want to enforce some fk > relationships. PL/pgSQL doesn't support external database connects. PL/TclU does. But keep in mind that with this kind of setup you don't have two phase commits, and that updates done through such a trigger (e.g. cascades) will not rollback if your local update does so after it got fired, because you have to commit the remote transaction before you know if your local one ever will. Jan -- #======================================================================# # It's easier to get forgiveness for being wrong than for being right. # # Let's break this rule - forgive me. # #================================================== JanWieck@Yahoo.com # _________________________________________________________ Do You Yahoo!? Get your free @yahoo.com address at http://mail.yahoo.com