У меня возникла проблема при попытке обновить столбец с уникальной строкой в PostgreSQL. У меня есть таблица с около 30kk записей. Я хочу установить уникальное значение sha1
для определенного столбца (назовем его fieldName
), но только для тех строк, где этот столбец NULL
- в таблице есть около 20kk записей такого типа. Существует ограничение UNIQUE
столбца fieldName
.Невозможно сгенерировать много уникальных строк
Итак, я написал простой запрос:
UPDATE tableName
SET fieldName =
ENCODE(
DIGEST(CONCAT('salt_string, EXTRACT(EPOCH FROM NOW()), random()), 'sha1'),
'hex')
WHERE fieldName IS NULL
Но я всегда получаю ошибку ERROR: duplicate key value violates unique constraint "..."
после некоторого времени выполнения этого запроса.
Так что я хотел бы спросить, есть ли что-то неправильно в том, как я генерирую уникальную строку. Может быть, это не «случайно»? Или я ничего не пропустил?
Спасибо за помощь! Я подозревал, что проблема была в «одинаковости» строки, но я также надеялся, что функция «random()» будет достаточной, чтобы гарантировать ее уникальность. –