existe uma maneira de evitar chamar nextval() se a inserção falhar no PostgreSQL?
Acho que não:uma característica básica das sequências é que as lacunas são possíveis (pense em duas transações simultâneas, com uma executando um ROLLBACK). Você deve ignorar as lacunas. Por que eles são um problema no seu caso?