Eu escrevi um exemplo detalhado de uma implementação de sequência sem intervalos usando PL/PgSQL aqui .
A ideia geral é que você deseja que uma tabela armazene os valores de sequência e use
SELECT ... FOR UPDATE
seguido por UPDATE
- ou a abreviação UPDATE ... RETURNING
- para obter valores dele enquanto bloqueia a linha até que sua transação seja confirmada ou revertida.