This page in other versions: 0.9 / 1.0 / 1.0.3

10.6. Global sequence voting

Global sequences allocate values in chunks. Each chunk allocation is done by voting between the nodes to make sure that no chunk is ever allocated to more than one node. For this to work, enough nodes must be reachable to reach a binding vote. BDR requires that half the nodes, plus one, be able to communicate in order to vote successfully.

If more than half the nodes are down or are unreachable from a given node then global sequence voting cannot achieve a quorum, so new chunks will not be allocated in global sequences on that node. Inability to acquire new global sequence chunks will eventually cause nextval calls on that node to fail with:

    ERROR: could not find free sequence value for global sequence
   

until connectivity is restored and the next round of voting has completed.

It is possible nodes that are up but isolated to be unable to get new global sequence chunks while the rest of the BDR group continues to function normally. If no individual connected group of nodes contains more than half the total node count then no node will be able to allocate global sequence chunks.

Global sequences are not immediately ready for use. Attemting to create then immediately use a global sequence, before the first round of voting, will result in an error like:

    ERROR: global sequence public.myseq is not initialized yet
   

Simply insert a delay before using the sequence.

See also Global Sequence Limitations.