I have verified that killing the postmaster after a few nextval's
leaves things in a bad state after restart.
I think I see the problem: in nextval(), the sequence data written to
the WAL log is different from that written to the data page. Isn't
that bogus?
To WAL:
seq->last_value = next;
seq->is_called = true;
seq->log_cnt = 0;
To disk:
seq->last_value = last; /* last fetched number */
seq->is_called = true;
seq->log_cnt = log; /* how much is logged */
(also, "log" has been changed between these two points)
regards, tom lane