Как обновить уникальные значения в SQL, используя последовательность PostgreSQL?
-
02-07-2019 - |
Вопрос
Как в SQL обновить таблицу, установив для столбца разные значения для каждой строки?
Я хочу обновить некоторые строки в базе данных PostgreSQL, присвоив одному столбцу число из последовательности, где этот столбец имеет уникальное ограничение.Я надеялся, что смогу просто использовать:
update person set unique_number = (select nextval('number_sequence') );
но кажется, что следующийвал вызывается только один раз, поэтому обновление использует один и тот же номер для каждой строки, и я получаю ошибку «дубликат ключа нарушает уникальное ограничение».Что мне делать вместо этого?
Решение
Не используйте подзапрос, а используйте функцию nextval напрямую, например:
update person set unique_number = nextval('number_sequence');
Другие советы
Я считаю, что последовательности pg — это хак, и указывает на то, что инкрементальные целые числа — не лучший способ ключевые строки.Хотя pgsql не получил встроенной поддержки UUID до версии 8.3.
http://www.postgresql.org/docs/8.3/interactive/datatype-uuid.html
Преимущества UUID заключаются в том, что комбинация практически бесконечна, в отличие от случайного числа, которое однажды столкнется с столкновением.