bogdan_uman
@bogdan_uman
шлЫмазл неукЪ-поцЪ

Автоинкремент в INSERT INTO ... ON CONFLICT?

Здравствуйте. При INSERT INTO ... ON CONFLICT автокримент срабатывает для каждой записи. nextval('dishes_products_norms_id_seq'::regclass). И уже при вставке идет разрыв в id.

Например, первая вставка. Записи отсутствую и вставляются в базу.
INSERT INTO dishes_products_norms ( dish_id,product_id,children_category_id,amount ) VALUES ( 980190962,28,6,0.02 ),( 980190962,33,6,0.02 ) ON CONFLICT ( dish_id, product_id, children_category_id ) DO UPDATE SET amount = EXCLUDED.amount RETURNING id ;


Результат поля id
"ids": [
        129,
        130
    ]


Вторая вставка, первая запись обновляется, вторая запись идет вставка.
INSERT INTO dishes_products_norms ( dish_id,product_id,children_category_id,amount ) VALUES ( 980190962,28,6,0.03 ),( 980190962,33,6,0.02 ) ON CONFLICT ( dish_id, product_id, children_category_id ) DO UPDATE SET amount = EXCLUDED.amount RETURNING id ;


Результат поля id
"ids": [
        129,
        132
    ]


Как сделать что бы не срабатывал автоинкримент?
  • Вопрос задан
  • 351 просмотр
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Никак. Работает как задумано.

И уже при вставке идет разрыв в id.

sequence не гарантирует неразрывность. И последовательность значений тоже не гарантирует.
Гарантирует только уникальность значений.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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