使用Liquibase在Snowflake创建存储过程时提示无当前架构错误
解决方案:Liquibase创建Snowflake存储过程报错无当前Schema
问题原因
虽然你指定了--defaultSchemaName=MY_SCHEMA,但Liquibase在处理存储过程的CREATE语句时,并没有像建表操作那样自动将默认Schema应用到对象名称上,导致Snowflake会话找不到当前Schema,触发报错。
可行解决方法
方法1:在存储过程SQL中使用全限定名称
修改my_proc.sql里的创建语句,直接指定目标Schema:
CREATE OR REPLACE PROCEDURE MY_SCHEMA.MY_PROC(参数列表) RETURNS ... LANGUAGE ... AS $$ -- 存储过程逻辑代码 $$;
这种方式最直接,不管会话的当前Schema是什么,都能精准指定存储过程的创建位置。
方法2:在SQL文件开头添加USE SCHEMA语句
在my_proc.sql的最顶部加上切换Schema的语句,确保会话有明确的当前Schema:
USE SCHEMA MY_SCHEMA; CREATE OR REPLACE PROCEDURE MY_PROC(参数列表) RETURNS ... LANGUAGE ... AS $$ -- 存储过程逻辑代码 $$;
执行存储过程创建前,先把会话的当前Schema切到目标库,Snowflake就能识别正确的创建位置。
方法3:通过Liquibase变更集前置语句设置Schema
如果不想修改SQL文件,可以在变更集里添加前置SQL,先切换Schema:
<changeSet id="add my_proc" author="tzachz"> <sql>USE SCHEMA MY_SCHEMA;</sql> <sqlFile path="my_proc.sql"/> </changeSet>
确保存储过程创建前,会话已经切换到正确的Schema环境。
内容的提问来源于stack exchange,提问作者Tzach Zohar
相关产品推荐
相关产品推荐

