Re: guaranteeing that a sequence never skips (fwd)

Поиск
Список
Период
Сортировка
От Mike Nolan
Тема Re: guaranteeing that a sequence never skips (fwd)
Дата
Msg-id 200410031748.i93HmmOX019531@gw.tssi.com
обсуждение исходный текст
Ответы Re: guaranteeing that a sequence never skips (fwd)  ("Scott Marlowe" <smarlowe@qwest.net>)
Список pgsql-general
> On Sun, 2004-10-03 at 08:58, David Garamond wrote:
> > Am I correct to assume that SERIAL does not guarantee that a sequence
> > won't skip (e.g. one successful INSERT gets 32 and the next might be 34)?
> >
> > Sometimes a business requirement is that a serial sequence never skips,
> > e.g. when generating invoice/ticket/formal letter numbers. Would an
> > INSERT INTO t (id, ...) VALUES (SELECT MAX(col)+1 FROM t, ...) suffice,
> > or must I install a trigger too to do additional checking?
>
> You will have to lock the whole table and your parallel performance will
> be poor.

Locking the table isn't sufficient to guarantee that a sequence value
never skips.  What if a transaction fails and has to be rolled back?

I've written database systems that used pre-numbered checks, what's usually
necessary is to postpone the check-numbering phase until the number of
checks is finalized, so that there's not much chance of anything else
causing a rollback.
--
Mike Nolan

В списке pgsql-general по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: VACUUM FULL on 24/7 server
Следующее
От: "Uwe C. Schroeder"
Дата:
Сообщение: Re: guaranteeing that a sequence never skips