Flyway clean命令在Snowflake执行失败:ASSOCIATE_SEMANTIC_CATEGORY_TAGS异常
执行Flyway的clean命令时遇到如下SQL编译错误:
Procedure '..ASSOCIATE_SEMANTIC_CATEGORY_TAGS' does not exist or not authorized.
完整堆栈追踪:
2024-02-27T14:12:10.5828869Z Message : SQL compilation error: 2024-02-27T14:12:10.5829911Z Procedure '..ASSOCIATE_SEMANTIC_CATEGORY_TAGS' does not exist or not authorized. 2024-02-27T14:12:10.5831459Z at org.flywaydb.core.internal.database.base.Schema.clean(Schema.java:123) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5832649Z at org.flywaydb.core.internal.command.DbClean.lambda$doCleanSchema$3(DbClean.java:216) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5833975Z at org.flywaydb.core.internal.jdbc.TransactionalExecutionTemplate.execute(TransactionalExecutionTemplate.java:55) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5835289Z at org.flywaydb.core.internal.command.DbClean.doCleanSchema(DbClean.java:215) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5836784Z at org.flywaydb.core.internal.command.DbClean.cleanSchema(DbClean.java:208) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5837880Z at org.flywaydb.core.internal.command.DbClean.cleanSchemas(DbClean.java:196) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5839210Z at org.flywaydb.core.internal.command.DbClean.clean(DbClean.java:112) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5840542Z at org.flywaydb.core.internal.command.DbClean.clean(DbClean.java:90) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5841707Z at org.flywaydb.core.internal.command.DbClean.clean(DbClean.java:76) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5842839Z at org.flywaydb.core.internal.command.DbClean.clean(DbClean.java:67) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5844539Z at org.flywaydb.core.Flyway.doClean(Flyway.java:367) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5845578Z at org.flywaydb.core.Flyway.access$400(Flyway.java:56) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5846573Z at org.flywaydb.core.Flyway$3.execute(Flyway.java:214) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5847475Z at org.flywaydb.core.Flyway$3.execute(Flyway.java:211) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5848448Z at org.flywaydb.core.FlywayExecutor.execute(FlywayExecutor.java:207) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5849503Z at org.flywaydb.core.Flyway.clean(Flyway.java:211) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5850377Z at com.varian.acdp.flyway.executor.AcdpFlywayExecutor.clean(AcdpFlywayExecutor.java:75) ~[classes!/:2.0] 2024-02-27T14:12:10.5851227Z at com.varian.acdp.flyway.FlywayUtil.runFlyWay(FlywayUtil.java:30) ~[classes!/:2.0] 2024-02-27T14:12:10.5852058Z at com.varian.acdp.flyway.SnowflakeFlywayApp.run(SnowflakeFlywayApp.java:80) ~[classes!/:2.0] 2024-02-27T14:12:10.5853431Z at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:769) ~[spring-boot-3.0.6.jar!/:3.0.6] 2024-02-27T14:12:10.5854151Z ... 13 more 2024-02-27T14:12:10.5855061Z Caused by: net.snowflake.client.jdbc.SnowflakeSQLException: SQL compilation error:
该存储过程为Snowflake官方提供,不属于自定义模式。
解决方案
1. 授予存储过程调用权限
使用具有ACCOUNTADMIN权限的角色执行以下SQL,为Flyway使用的数据库角色授予该存储过程的调用权限:
-- 先确认存储过程的完整签名,避免重载导致权限不匹配 DESCRIBE PROCEDURE ASSOCIATE_SEMANTIC_CATEGORY_TAGS(VARCHAR, VARCHAR, VARCHAR); -- 授予调用权限 GRANT USAGE ON PROCEDURE ASSOCIATE_SEMANTIC_CATEGORY_TAGS(VARCHAR, VARCHAR, VARCHAR) TO ROLE <你的Flyway用户角色>;
2. 升级Flyway版本
当前使用的Flyway 8.5.0版本可能存在与Snowflake新特性的兼容性问题,建议升级到9.x及以上版本,新版本通常会修复Snowflake相关的API调用和权限处理逻辑。
3. 确认Snowflake功能启用状态
联系Snowflake支持团队,确认当前账户是否已启用语义类别标签(Semantic Category Tags)相关功能,部分高级功能需要账户级别的启用配置。
4. 临时规避方案(不推荐长期使用)
如果暂时无法获取权限或升级版本,可以通过Flyway配置禁用clean操作,或者排除特定对象:
- 禁用clean:添加配置
flyway.clean.disabled=true - 排除对象:使用
flyway.clean.excludeObjects指定不需要清理的对象类型或名称
内容的提问来源于stack exchange,提问作者Suresh Vasant Sargar
相关产品推荐
相关产品推荐

