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