Ho scritto un esempio dettagliato di un'implementazione di una sequenza gapless utilizzando PL/PgSQL qui .
L'idea generale è che vuoi che una tabella memorizzi i valori della sequenza e usi SELECT ... FOR UPDATE
seguito da UPDATE
- o l'abbreviazione UPDATE ... RETURNING
- per ottenere valori da esso bloccando la riga fino a quando la transazione non viene eseguita o ripristinata.