I thought if I had some application logic that needed a certain kind of transaction (maybe a non-default isolation level), I could hide that fact in a procedure. App code (Java/Python/whatever) could remain unaware of transactions (except maybe needing to retry after a failure) and simply send `call foo(?, ?)` to the DB. But maybe that kind of design is not supported, and application code needs to start transactions and set isolation levels. Is that accurate? I supposed a procedure could throw an exception if it doesn’t like the value in `current_setting('transaction_isolation’)`.
Rob > On Feb 19, 2019, at 2:38 PM, David G. Johnston <david.g.johns...@gmail.com> > wrote: > > On Tuesday, February 19, 2019, Rob Nikander <rob.nikan...@gmail.com > <mailto:rob.nikan...@gmail.com>> wrote: > Are procedures not allowed to commit/rollback if they are called within in > an outer transaction? > > https://www.postgresql.org/docs/11/sql-call.html > <https://www.postgresql.org/docs/11/sql-call.html> > > Also, I tried putting a `start transaction` command in the procedure. I got > another error: `unsupported transaction command in PL/pgSQL`. Are procedures > not allowed to start transactions? Or is there another command? > > https://www.postgresql.org/docs/11/plpgsql-transactions.html > <https://www.postgresql.org/docs/11/plpgsql-transactions.html> > > David J. >