A deep dive into PostgreSQL's `default_transaction_deferrable` GUC parameter, explaining that it only has effect when combined with SERIALIZABLE and READ ONLY transaction modes. The post covers how PostgreSQL's Serializable Snapshot Isolation (SSI) works, what 'safe snapshots' are, and how DEFERRABLE transactions wait for a safe snapshot to avoid predicate locks and serialization failures entirely. The recommendation is to leave the global default off and use the DEFERRABLE keyword per-transaction or per-role for dedicated reporting/backup connections against serializable workloads.
Table of contents
When it does nothing, which is usuallySafe snapshots, brieflyWhat DEFERRABLE actually buysWhat to set it to185 Impressions