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.