delef
@delef
Разработчик (Crystal, Python, Ruby, PHP, JS)

Можно ли при конфликте (INSERT) не обновлять SEQUENCE?

Есть таблица, в которой для избежания дубликатов создан столбец count, который обновляется каждый раз, когда пытаешься добавить дубликат, всё это реализовано на основе уникального индекса этих столбцов.

Для добавления/обновления использую синтаксис:
INSERT INTO table (..columns)
VALUES (..columns)
ON CONFLICT (..columns) DO
    UPDATE SET count = table.count + 1


И каждый раз, когда вызывается UPDATE - значение SEQUENCE меняется на n+1
Можно ли как-то на этот процесс повлиять?
  • Вопрос задан
  • 286 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Такое поведение стандартно для большинства СУБД. Перед началом выполнения INSERT'а запрашивается следующее значение для SERIAL, и СУБД увеличивает счётчик на единицу. Но, поскольку за время выполнения запроса ещё несколько запросов могли потребовать тот же счётчик, то неиспользованные значения обратно не принимаются и образуются пропуски.
Сделать свой счётчик можно, но ценой производительности (www.varlena.com/GeneralBits/130.php). Как правило, смысла в этом нет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы