Проблема в том, что, даже если вы укажете ON CONFLICT DO NOTHING
, вы не укажете столбец id
в своих операторах INSERT
. Это не обязательно плохо, но в основном сводит на нет ваше предложение ON CONFLICT DO NOTHING
(по крайней мере, ради последовательности запуска). Вы никогда не столкнетесь с конфликтом, потому что столбец id
является последовательным и является вашим основным ключом. Поэтому, если вы явно не назовете его в своем операторе INSERT
, база данных с радостью добавит еще одну строку со значением «next» этой последовательности id
вместе с другими столбцами, указанными в вашем INSERT
. Конфликт возникает только тогда, когда вы сталкиваетесь с ситуацией, когда у вас есть два идентичных значения для первичного ключа, и в вашем Data.sql
вы никогда не достигнете этой ситуации.
Если вы действительно хотите поведение ON CONFLICT DO NOTHING
, затем вам нужно добавить столбец id
в ваши INSERT
s, а затем обязательно установить ваши последовательности с setval()
, чтобы новые строки, сгенерированные вашим приложением, не были случайно удалены или проигнорированы из-за id
конфликт.
Другой вариант (если ваш набор данных предназначен ТОЛЬКО для разработки) - урезать таблицы, чтобы каждый раз получать чистый рабочий набор данных (но это зависит от ваших требований). Если вы сделаете это, то вам также нужно будет сбросить свои последовательности, чтобы ваши id
не только продолжали расти вечно.
Наконец, вы можете просто установить SPRING_DATASOURCE_INITIALIZATION_MODE = Never
теперь, когда вы загрузилиначальные данные. Опять же, это просто решение, которое вам нужно принять на основе ваших требований.