Liquibase回滚语句触发时机及删除索引场景下的回滚写法咨询
Liquibase SQL回滚相关问题解答
问题1:注释中的DROP INDEX ORDERS_IDX_SESSION_ID;语句是在操作出错时由Liquibase自动执行,还是仅作为开发者提示?
这条语句既不是操作出错时自动执行,也不是单纯的开发者提示——它是Liquibase的正式可执行回滚指令。只有当你主动触发Liquibase的回滚操作(比如执行liquibase rollback-count 1这类命令)时,Liquibase才会调用这条语句,来撤销当前changeset创建索引的操作。
问题2:若当前操作是删除索引,应编写何种回滚语句?
如果当前changeset的核心操作是删除目标索引(比如执行DROP INDEX ORDERS_IDX_SESSION_ID;),对应的回滚语句需要完整还原索引的创建逻辑,也就是把原创建索引的SQL写在--rollback后面,示例如下:
--liquibase formatted sql --changeset Jack:drop_session_id_index rollbackSplitStatements:true runInTransaction:false DROP INDEX ORDERS_IDX_SESSION_ID; --rollback CREATE INDEX CONCURRENTLY ORDERS_IDX_SESSION_ID ON orders((orders_counter->>'sessionId'));
要注意保持回滚语句和原创建语句的一致性(比如保留CONCURRENTLY关键字),确保回滚后数据库状态能完全恢复。
内容的提问来源于stack exchange,提问作者Ekaterina
相关产品推荐
相关产品推荐

