ConflictMode : What the target does with a row that collides with one already present. error is a plain INSERT (the default, and the behaviour of every run before #1216). skip is INSERT ... ON CONFLICT DO NOTHING, which makes re-sending an already-applied batch a no-op – the only thing that lets a run resume across the window where the previous attempt’s last batch may or may not have committed. skip is refused with a 400 if the target table has no unique constraint covering the mapped columns, since ON CONFLICT DO NOTHING would then never fire and would duplicate rather than skip.
What the target does with a row that collides with one already present. error is a plain INSERT (the default, and the behaviour of every run before #1216). skip is INSERT ... ON CONFLICT DO NOTHING, which makes re-sending an already-applied batch a no-op – the only thing that lets a run resume across the window where the previous attempt’s last batch may or may not have committed. skip is refused with a 400 if the target table has no unique constraint covering the mapped columns, since ON CONFLICT DO NOTHING would then never fire and would duplicate rather than skip.