Thread: PL/SQL Function: self-contained transaction?
In PostgreSQL, as everyone knows, a QUERY == a transaction, unless wrap'd in a BEGIN/END explicitly ... how does that work with a function? is there an implicit BEGIN/END around the whole transaction, or each QUERY within the function itself? If the whole function (and all QUERYs inside of it) are considered one transaction, can you do a begin/end within the function itself to 'force' commit on a specific part of the function? ---- Marc G. Fournier Hub.Org Networking Services (http://www.hub.org) Email: scrappy@hub.org Yahoo!: yscrappy ICQ: 7615664
"Marc G. Fournier" <scrappy@postgresql.org> writes: > In PostgreSQL, as everyone knows, a QUERY == a transaction, unless wrap'd in a > BEGIN/END explicitly ... how does that work with a function? is there an > implicit BEGIN/END around the whole transaction, or each QUERY within the > function itself? The whole outer query issued from your frontend is in one transaction. > If the whole function (and all QUERYs inside of it) are considered one > transaction, can you do a begin/end within the function itself to 'force' > commit on a specific part of the function? Functions cannot issue start or end transactions. They're a creature of the transaction you're in when you call them. Otherwise it wouldn't make sense to be able to call them from within a query. There is some discussion of "stored procedures" which would live outside of transactions and be able to create transactions, commit, and roll them back. But I don't think any of that work is committed yet. I'm not even sure it's been written yet. -- greg
am 22.08.2005, um 14:16:30 -0300 mailte Marc G. Fournier folgendes: > > In PostgreSQL, as everyone knows, a QUERY == a transaction, unless wrap'd > in a BEGIN/END explicitly ... how does that work with a function? is there > an implicit BEGIN/END around the whole transaction, or each QUERY within > the function itself? > > If the whole function (and all QUERYs inside of it) are considered one > transaction, Yes, exactly. Regards, Andreas -- Andreas Kretschmer (Kontakt: siehe Header) Heynitz: 035242/47212, D1: 0160/7141639 GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net=== Schollglas Unternehmensgruppe ===
I think the Enterprise DB folks are actively working it. I don't know what their plans to release their work back to the community are. Mail thread: http://archives.postgresql.org/pgsql-general/2005-08/msg00582.php Article: http://oetrends.com/news.php?action=view_record&idnum=428 Home: http://www.enterprisedb.com Rick pgsql-sql-owner@postgresql.org wrote on 08/22/2005 01:20:00 PM: > > "Marc G. Fournier" <scrappy@postgresql.org> writes: > > > In PostgreSQL, as everyone knows, a QUERY == a transaction, unless > wrap'd in a > > BEGIN/END explicitly ... how does that work with a function? is there an > > implicit BEGIN/END around the whole transaction, or each QUERY within the > > function itself? > > The whole outer query issued from your frontend is in one transaction. > > > If the whole function (and all QUERYs inside of it) are considered one > > transaction, can you do a begin/end within the function itself to 'force' > > commit on a specific part of the function? > > Functions cannot issue start or end transactions. They're a creature of the > transaction you're in when you call them. Otherwise it wouldn't make sense to > be able to call them from within a query. > > There is some discussion of "stored procedures" which would live outside of > transactions and be able to create transactions, commit, and roll them back. > But I don't think any of that work is committed yet. I'm not even sure it's > been written yet. > > -- > greg > > > ---------------------------(end of broadcast)--------------------------- > TIP 6: explain analyze is your friend