I'd like to propose generic functions (probably in an extension, or in core if not possible otherwise) to facilitate streaming existing data from the database *in the same format* that one would get if these would be the changes decoded by a logical decoding plugin.
The idea is to use a snapshot returned from CREATE_REPLICATION_SLOT command of the replication protocol to get a consistent snapshot of the database, then start listening to new changes on the slot.
It sounds like this is already possible.
Totally, that's how it was supposed to be used anyway. What is missing IMO is retrieving the initial snapshot in the same format as that the later changes will arrive.