JasperFx / marten

.NET Transactional Document DB and Event Store on PostgreSQL
https://martendb.io
MIT License
2.79k stars 441 forks source link

Use `insert .. on conflict` for bulk import operations #3301

Open elexisvenator opened 2 months ago

elexisvenator commented 2 months ago

Updates the behaviour of BulkInsertMode.OverwriteExisting to use insert ... on conflict do update. This is one less db statement than before and a less prone to constraint issues. Also updates the behaviour of BulkInsertMode.IgnoreDuplicates to use insert ... on conflict do nothing.

(Wasn't going to create this so soon but ran into an issue where spamming some seed data resulted in unique constraint violations when using OverwriteExisting)

Tests pass but I had to delete the checked in generated code files. I am not sure what the correct way to regenerate these files is - can this be added to the doco somewhere so I can fix the issue myself next time 🙇 .

jeremydmiller commented 1 month ago

I'm going to pull this down locally and try it first. Can't see any reason why this would fail offhand

jeremydmiller commented 1 month ago

This is a breaking change because it requires rebuilding all generated code. Hmm, think this might have to wait for Marten 8.

Which I do actually want to get to relatively soon-ish