Jag skrev ett detaljerat exempel på en gapfri sekvensimplementering med PL/PgSQL här .
Den allmänna idén är att du vill ha en tabell för att lagra sekvensvärdena, och du använder SELECT ... FOR UPDATE
följt av UPDATE
- eller förkortningen UPDATE ... RETURNING
- för att få värden från den samtidigt som du låser raden tills din transaktion genomförs eller rullas tillbaka.