Il tuo link ai documenti di Psycopg2 in un certo senso lo spiega da solo, no?
Quindi, a meno che tu non stia utilizzando un livello di isolamento diverso o utilizzando PgBouncer, il tuo primo esempio dovrebbe funzionare correttamente. Tuttavia, se desideri un controllo più dettagliato su ciò che accade esattamente durante una transazione, il metodo try/except potrebbe essere il migliore, poiché è parallelo allo stato della transazione del database stesso.