> It appears that when logical decoding sends out the data from the output > plugin, it is not guaranteed that the decoded transaction's effects are > visible on the source server. Is this the way it's supposed to work?
Can you please share the test that indicates this behavior? As far as I understand, the transaction must have been committed before the output plugin starts to receive the changes.
I don't have a reliable test program, but you can reproduce quite easily with test_decoding if you put a breakpoint before the SyncRepWaitForLSN() call in src/backend/access/transam/xact.c. pg_logicalrecv will see the changes while the session is sitting on the breakpoint, and not finishing its commit.