Currently, you can't run SET TRANSACTION in PL/pgSQL. A normal SQL command run inside PL/pgSQL acquires a snapshot, but SET TRANSACTION does not work anymore if a snapshot is set. Here is a patch to work around that by handling this command separately. I have coded this here bypassing SPI entirely. But there is some overlap with the no_snapshot option in the patch "PL/pgSQL nested CALL with transactions", so maybe a better solution will arise. This will also inform how to tackle this in other PLs.
I didn't dig deeply into this subject. But should we rather teach SPI to execute
utility statements without taking snapshot when not necessary. That seems
like what executor do for client provided queries. And that seems a bit unlogical