Is it expected that this can happen. A newer transaction claiming a lower seq value?
Yes.
The formulation "claiming a lower seq value" is fuzzy. You seem to be thinking "writing a lower sequence number to a table row". But that's already beyond the reach of a SEQUENCE
.
What a SEQUENCE
guarantees
(Also addressing the discussion in comments.)
Retrieving numbers from a sequence happens strictly sequentially, as the name implies - with some notable exceptions:
- Manual intervention. Users with sufficient privileges can manipulate the
SEQUENCE
object any way they wish. - Wraparound. Typically an unlikely event, even for
integer
number space. Near impossible for the vast realm ofbigint
- except, again, after manual intervention or code bugs of colossal proportions. You would be able to tell a wraparound when looking at it. - Sequences with a
cache
setting greater 1.
There is an example in the manual:
For example, with a
cache
setting of 10, session A might reserve values 1..10 and returnnextval=1
, then session B might reserve values 11..20 and returnnextval=11
before session A has generatednextval=2
. Thus, with acache
setting of one it is safe to assume thatnextval
values are generated sequentially; with acache
setting greater than one you should only assume that thenextval
values are all distinct, not that they are generated purely sequentially.
Bold emphasis mine.
BUT that's beyond the point
For one, the time when a sequence number is issued is not strictly bound to the time when (or if) it will be written. That way can be long and winding ...
More importantly, concurrent transactions draw numbers largely independent of when they started. Of course, later transactions can write earlier sequence numbers, or in your terms, newer transaction can claim lower seq values.
The whole idea falls flat at the most basic level.