You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake部署代码时Liquibase报无当前schema错误如何解决

Snowflake平台Liquibase部署报90106错误解决方法

核心报错信息如下:

Unexpected error running Liquibase: Cannot perform CREATE TABLE. This session does not have a current schema. Call 'USE SCHEMA', or use a qualified name. [Failed SQL: (90106) CREATE TABLE DATABASECHANGELOGLOCK (ID INT NOT NULL, LOCKED BOOLEAN NOT NULL, LOCKGRANTED TIMESTAMP_NTZ, LOCKEDBY VARCHAR(255), CONSTRAINT PK_DATABASECHANGELOGLOCK PRIMARY KEY (ID))]

手动执行USE SCHEMA、使用完全限定名仍无法解决的场景,按以下步骤逐一排查修复:

1. 显式配置Liquibase连接的默认schema

手动执行的USE SCHEMA只在当前交互会话生效,Liquibase部署时会创建独立的新会话,不会继承手动操作的会话上下文,必须在连接配置层指定默认schema:

  • JDBC连接串方式:在连接URL末尾直接拼接库、schema、仓库、角色参数,示例:
    jdbc:snowflake://<你的Snowflake账号标识>.snowflakecomputing.com/?db=<目标数据库名>&schema=<目标schema名>&warehouse=<使用的计算仓库名>&role=<连接使用的角色名>
    
  • 配置文件方式:在Liquibase配置项中显式指定默认schema,Spring集成场景配置示例:
    spring:
      liquibase:
        default-schema: <目标schema名>
    
    原生Liquibase配置项为liquibase.defaultSchema,直接在配置文件中赋值即可。

2. 校验连接角色的schema权限

连接使用的角色缺少目标schema的对应权限时,也会触发同类报错,执行以下SQL赋权即可:

GRANT USAGE ON SCHEMA <目标数据库名>.<目标schema名> TO ROLE <连接使用的角色名>;
GRANT CREATE TABLE ON SCHEMA <目标数据库名>.<目标schema名> TO ROLE <连接使用的角色名>;

3. 配置changelog全局Liquibase表schema

如果未在changelog中指定Liquibase系统表(DATABASECHANGELOGLOCK、DATABASECHANGELOG)的存储schema,Liquibase生成系统表DDL时不会自动拼接schema前缀,需在changelog根节点添加全局属性:

<databaseChangeLog>
  <property name="liquibaseSchemaName" value="<目标schema名>"/>
  <!-- 其余changelog配置 -->
</databaseChangeLog>

4. 校验部署流程的会话一致性

如果部署脚本存在多步会话切换、连接重置逻辑,确认schema设置操作和Liquibase执行操作在同一个会话上下文中,避免出现A会话设置schema、B会话执行部署的情况。


内容的提问来源于stack exchange,提问作者Sonal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 10:06:34