Re: Do blocks support transaction control?

From: Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at>
To: depesz(at)depesz(dot)com, pgsql-docs(at)lists(dot)postgresql(dot)org
Subject: Re: Do blocks support transaction control?
Date: 2022-09-24 15:14:42
Message-ID: b1b9330fed3738135aba8664a55a6fd8239985c8.camel@cybertec.at
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-docs

On Fri, 2022-09-23 at 13:33 +0000, PG Doc comments form wrote:
> Page: https://www.postgresql.org/docs/14/sql-do.html
> Description:
>
> Apparently now DO blocks support COMMIT; - which make them more like
> procedures than functions.
>
> Tried it with:
>
> create table z (a int4, b int4);
> insert into z (a,b) select i, i from generate_Series(1,10) i;
> do $$
> declare
> begin
> update z set b = 2;
> commit;
> perform pg_sleep(120);
> end;
> $$ language plpgsql;
>
> And while it was running, in another psql sessions, I:
>
> 1. could see b= 2
> 2. could update any of the rows in z.
>
> Is it documented anywhere? DO docs say that do is like function, which it
> doesn't seem to be?

The documentation says:

If DO is executed in a transaction block, then the procedure code cannot execute
transaction control statements. Transaction control statements are only allowed
if DO is executed in its own transaction.

That sentence would not make sense if COMMIT were not allowed in a DO statement.
So it is not spelled out, but implicitly clear.

Yours,
Laurenz Albe

In response to

Responses

Browse pgsql-docs by date

  From Date Subject
Next Message PG Doc comments form 2022-09-24 18:27:48 PostgreSQL source distribution files
Previous Message jian he 2022-09-24 12:40:36 sql-select.html ordinal number of an output column.