Search code examples
javamysqlspring-bootliquibase

How to drop event if exist in db through liquibase?


I have created one mysql event in liquibase(changelog.xml) file in my spring boot application. I want to drop the event if it is allready exist in db when I change some logic in event body. But executing drop statement below gives me mysql syntax error. How should I approach this event updation?

<changeSet id="EVENT_ARCHIVE" author="jk" runOnChange="true">
                    <sql endDelimiter="|">
                        DROP EVENT IF EXISTS event_archive_rcs_message_log;
                        SET GLOBAL event_scheduler="ON";
                        |
                        CREATE EVENT IF NOT EXISTS event_archive
                        ON SCHEDULE EVERY 7 DAY 
                        STARTS CURRENT_TIMESTAMP 
                        DO
                          some queries...!
                        End |
                     </sql>

</changeSet>

Solution

  • You must use specified delimiter instead of default one over all the script:

    <changeSet id="EVENT_ARCHIVE" author="jk" runOnChange="true">
                        <sql endDelimiter="|">
                            DROP EVENT IF EXISTS event_archive_rcs_message_log |
                            SET GLOBAL event_scheduler="ON" |
                            CREATE EVENT IF NOT EXISTS event_archive
                            ON SCHEDULE EVERY 7 DAY 
                            STARTS CURRENT_TIMESTAMP 
                            DO
                              -- some queries with ';' as delimiter 
                            End |
                         </sql>
    
    </changeSet>