You must create the replication slot manually in advance.
I thought that was documented as a caveat. For that matter, wasn't there discussion of detecting that situation and telling the user about the problem gracefully? Don't know if we ever got to doing that but seems not.
I'm imagining that this is because WAL is at the server level, not the db level, and it's impossible for the same server to logically replicate to itself, even though it's 2 separate databases. Am I right that that's the problem? Could someone help me get pointed in the right direction?
Nope, that's not it at all.
Logical decoding and logical rep works fine within a db instance.
It's a problem with logical decoding setup needing to see all txns open at the time of slot creation complete before it can return. But there's a txn open waiting for the slot creation to finish. So they get stuck waiting for each other and nothing progresses.