Skip to content

Conversation

andyundso
Copy link
Member

I contributed two tests to Rails because I was not sure how insert_all and upsert_all should behave with duplicate identifiers, but with different values in other columns.

For insert_all, all DBMS only insert the first value. For upsert_all, PostgreSQL throws an error in this scenario, but with sqlite and MySQL, the last entry ends up in the database.

For now, I do not have a smarter idea than reversing the inserts, which ultimately provide the values_list. Adding MAX would be another idea, but I fear the SQL query would get much more complicated.

I contributed two tests to Rails because I was not sure how `insert_all` and `upsert_all` should behave with duplicate identifiers.

For `insert_all`, all DBMS only insert the first value. For `upsert_all`, PostgreSQL throws an error in this scenario, but with sqlite and MySQL, the last entry ends up in the database.

For now, I do not have a smarter idea than reversing the `inserts`, which ultimately provide the `values_list`. Adding `MAX` would be another, but I fear the SQL query would get much more complicated.
@aidanharan aidanharan merged commit f69c849 into main Mar 23, 2025
1 of 6 checks passed
@aidanharan aidanharan deleted the reverse-upsert-order branch March 23, 2025 09:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants