Is there somewhere that the transaction semantics inside a procedure are documented ? From what I can tell transactions start from the first DML statement and end implicitly when the procedure exits. Commit or Rollback can be called anytime inside the transaction and this implicitly starts another transaction.
Is there anything else I am missing ? Does DDL get applied after the transaction ends ?
I do find this somewhat surprising as Postgres typically requires a BEGIN statement to start a transaction block.