Add upsert functionality #218
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I've updated my older PR #156 to align with the recent psycopg changes. Where possible, I have utilized the approach taken by Django in
queryset.bulk_create()
, which supports upsert (see docs).At the moment, specifying
update_conflicts=True
also requires explicitly settingdrop_indexes=False
anddrop_constraints=False
(since they are required by PostgreSQL to locate conflicting rows). This leads to a few options:drop_indexes
anddrop_constraints
defaults.update_conflicts=True
override and setdrop_indexes
anddrop_constraints
toFalse
.drop_indexes
anddrop_constraints
, as discussed in drop indices/constraints default should be False #117.Despite my comments in #117, I now have no preference among those options and would be happy to have it implemented any such way.
I'd be happy to answer any questions or implement any requested changes.
Merging this PR would close #91, #117 (possibly as "won't fix"), #122, and #168.