Подтвердить что ты не робот

Как обновить уникальные значения в SQL с помощью последовательности PostgreSQL?

В SQL, как обновить таблицу, установив столбец в другое значение для каждой строки?

Я хочу обновить некоторые строки в базе данных PostgreSQL, установив один столбец в число из последовательности, где этот столбец имеет уникальное ограничение. Я надеялся, что могу просто использовать:

update person set unique_number = (select nextval('number_sequence') );

но кажется, что nextval вызывается только один раз, поэтому обновление использует один и тот же номер для каждой строки, и я получаю ошибку "повторяющийся ключ, нарушающий уникальное ограничение". Что мне делать вместо этого?

4b9b3361

Ответ 1

Не используйте подзаголовок, скорее используйте функцию nextval напрямую, например:

update person set unique_number = nextval('number_sequence');

Ответ 2

Я рассматриваю pg-последовательности как взломать и знаки, что инкрементные целые числа не являются лучшим способом для строк. Хотя pgsql не получил встроенную поддержку UUID до 8.3

http://www.postgresql.org/docs/8.3/interactive/datatype-uuid.html

Преимущества UUID заключаются в том, что комбинация почти бесконечна, в отличие от случайного числа, которое в один прекрасный день попадет в столкновение.