Support native UPSERTs & CrockroachDB#99
Merged
JohnMcLear merged 3 commits intoether:masterfrom Mar 28, 2019
muxator:master
Merged
Support native UPSERTs & CrockroachDB#99JohnMcLear merged 3 commits intoether:masterfrom muxator:master
JohnMcLear merged 3 commits intoether:masterfrom
muxator:master
Conversation
This is a preparatory commit to centralize the UPSERT statement before refactoring it. Refactoring only: no functional changes.
Postgresql >= 9.5 and CockroachDB natively support UPSERT statements (ON CONFLICT ... DO UPDATE). - when initializing the library, we run an EXPLAIN INSERT ... ON CONFLICT to check if the construct is supported - if this succeeds, the UPSERT will be done done natively via ON CONFLICT ... DO UPDATE (Postgresql >= 9.5 and CockroachDB) - if this fails, we will continue using the old behaviour of emulating UPSERT via ueberdb_insert_or_update() (Postgresql <= 9.4) Among other things, this commit makes UeberDB compatible with CockroachDB
Contributor
Author
Contributor
Author
|
Hi @Pita, do you think there could be any drawbacks merging this? |
Member
|
@muxator are you willing to maintain this source for for at least 24 months from time of merge? |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Currently, when running on Postgres, UeberDB emulates UPSERTS operations on the key/value store via a pgsl function.
In 2016, with version 9.5, PostgreSQL gained the ability of natively performing UPSERTS on tables, via the SQL construct
ON CONFLICT ... DO UPDATE.CockroachDB, being externally modeled after PostgreSQL, also offers the same syntax.
As of version 1.x, CockroachDB does not support user defined functions.
This patch series aims to remove the use of the custom sql function
ueberdb_insert_or_update()for performing upserts, and instead uses native statements when available.The decision on using the upsert syntax or the sql function is taken based on feature detection, and not version sniffing.
The effects are:
The code was tested with: