Postgres executa
PL/pgSQL
dentro da transação. Assim, você não pode controlar a transação de dentro do PL/pgSQL
. O código ficará assim:begin;
select plpgsql_fn();
do '/*same any plpgsql*/';
end;
Então respondendo sua pergunta:
Se você tiver
PL/pgSQL
executando ATM, você tem sua transação ATM ativa... Claro que você pode fazer alguns truques, como iniciar/terminar o trabalho em
dblink
ou tal. mas então você pode verificar select txid_current();
sobre o dblink
com sucesso...