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

StackOverflow https://stackoverflow.com/questions/148005

  •  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 заключаются в том, что комбинация практически бесконечна, в отличие от случайного числа, которое однажды столкнется с столкновением.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top