Use a replace script to replace a deployed changes with the desired changes.
Sometimes database changes (changesets) need to be replaced after deployment. This can occur if a change fails testing in a later stage environment.
The replace capability allows you to deploy a changeset that is specially marked for replacing prior changes. During processing, the original changeset gets the attribute ignore=true
to prevent it from being deployed further.
See Cleaning Up Deployed Changesets: cleanup.
Pairing a Replace Script with a Cleanup Script
You commonly need to deploy a cleanup script to undo the changes of the script you want to replace.
A cleanup script and a replace script can be packaged in the same packaging run.
Types of Change Eligible for Replace Scripts
Replace scripts work for different types of changes:
- DDL - replace a set of scripted changes with a different script.
- DML - replace changes that remove records or insert records.
- Liquibase changelogs - replace the changesets packaged from the original changelog with changesets from the replacement changelog.
- NOT recommended for stored logic (code: package, packagebody, procedure, function, trigger, view folders) - Use the provided versioning capability instead.
Replacing Changesets
For a file named myscript.sql
, create a replace file that contains the code to replace what was deployed before. Use one of the following forms:
myscript-replace.sql
myscript_replace.sql
The file may use any extension (e.g. .sql) or no extension.
Processing
Deployment Packager processes the files during packaging, as follows:
- Searches the changelog for matching changesets based on filename. Packager will error if there are no matching changesets in the changelog that were previously packaged with the same filename in the same path relative to the root folder. Changesets must match these attributes:
- origFilePath
- origFileName
- Sets
ignore=true
attribute on all matching changesets (same orgFilePath and origFileName) that pertain to the most recent / highest version - Produces new changeset(s) and positions them in the changelog.immediately following the most recent changeset(s)
- Archives the replace file as appropriate.