Как обновить уникальные значения в SQL, используя последовательность PostgreSQL? - PullRequest
11 голосов
/ 29 сентября 2008

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

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

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

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

Ответы [ 2 ]

28 голосов
/ 29 сентября 2008

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

update person set unique_number = nextval('number_sequence');
0 голосов
/ 06 ноября 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...