Explore postgres recovery log records
If it was the client that force-closed, not the server, then the server has not gone through recovery.  The client going away in the middle of a transaction is the same thing as the client explicitly aborting the transaction.

Recovery is what happens when the server crashes. I think you have an incorrect mental model of how PostgreSQL handles transaction aborts. The old data is still there, simply because the transaction that would have rendered it invisible failed to commit.  No explicit recovery is needed.