Did you implement something like described here? https://netflixtechblog.com/dblog-a-generic-change-data-capt...
Lastly, I wonder what plugin you're using for the Postgres logical replication?
Congrats!
Edit: re-read it and saw about the DuckDB blog's inspired ctid solution for the initial snapshot. Do you find querying by ctid okay performance wise? As far as I remember it will use sequential scans