On Wed, Nov 15, 2017 at 3:42 PM, Peter Eisentraut <peter.eisentr...@2ndquadrant.com> wrote: > On 11/15/17 09:54, Merlin Moncure wrote: >> ... I noticed that: >> *) now() did not advance with commit and, >> *) xact_start via pg_stat_activity did not advance >> >> Shouldn't both of those advance with the in-loop COMMIT? > > I think you are correct. I'll include that in the next patch version. > It shouldn't be difficult.
Thanks. A couple of more things. *) This error message is incorrect now: postgres=# CREATE OR REPLACE PROCEDURE foo() AS $$ BEGIN LOOP SAVEPOINT x; END LOOP; END; $$ LANGUAGE PLPGSQL; CREATE PROCEDURE Time: 0.912 ms postgres=# call foo(); ERROR: cannot begin/end transactions in PL/pgSQL HINT: Use a BEGIN block with an EXCEPTION clause instead. CONTEXT: PL/pgSQL function foo() line 5 at SQL statement I guess there are a few places that assume pl/pgsql is always run from a in-transaction function. *) Exception handlers seem to override COMMITs. The the following procedure will not insert any rows. I wonder if this is the correct behavior. I think there's a pretty good case to be made to raise an error if a COMMIT is issued if you're in an exception block. CREATE OR REPLACE PROCEDURE foo() AS $$ BEGIN LOOP INSERT INTO foo DEFAULT VALUES; COMMIT; RAISE EXCEPTION 'test'; END LOOP; EXCEPTION WHEN OTHERS THEN RAISE NOTICE '%', SQLERRM; END; $$ LANGUAGE PLPGSQL; *) The documentation could use some work. Would you like some help? merlin