Question

I need to convert a MySQL INSERT IGNORE INTO ... statement to a changeSet in liquibase and I prefer not to insert the statement directly in the changeSet.

Since I cannot find a direct translation, I'm wondering how to write a changeSet to insert a row only if the primary key part doesn't already exists in another row of the same table?

Was it helpful?

Solution

Liquibase doesn't have direct support for INSERT IGNORE support. If you are not wanting to use the <sql> tag, your only option is to use something like

<changeSet>
        <insert ...></insert>
        <modifySql>
             <replace replace="INSERT" with="INSERT IGNORE"/>
         </modifySql>
</changeSet>

OTHER TIPS

With a liquibase 3.2 and oracle12

<changeSet>
        <insert ...></insert>
        <modifySql>
             <replace replace="INSERT" with="insert /*+ ignore_row_on_dupkey_index(my_table, my_table_pk) */"/>
         </modifySql>
</changeSet>

remarks : Not use "replace value" but "replace replace"

It works too with the changeset loadData

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top