如何调试dbt「列出数据库中模式时发生数据库错误」报错
问题原因及解决方案
根因分析
- 参数写法错误:dbt指定运行target的正确参数为
--target(长参数)或-t(短参数),你直接写target dev属于无效参数,dbt不会按照预期读取你profiles.yml中的dev配置。 - 项目级配置覆盖:你的dbt项目根目录下的
dbt_project.yml大概率配置了全局的数据库取值为{{ target.name }},该配置的优先级高于profiles.yml中的database配置,会强制将运行时的数据库名设置为和target名称一致,因此target为dev时,dbt会尝试连接不存在的DEV数据库。
解决步骤
- 第一步:修正执行命令的写法
运行dev环境的正确命令为:dbt run --target dev -m model_name # 或短参数写法 dbt run -t dev -m model_name - 第二步:排查并修改dbt_project.yml配置
打开项目根目录的dbt_project.yml文件,查找database相关配置,如果你看到类似如下的规则:
直接删除该配置项,或修改为固定的数据库名models: <你的项目名称>: +database: "{{ target.name }}"ANALYTICS即可。 - 第三步:排查自定义宏(如果第二步未解决问题)
检查项目macros/目录下是否存在generate_database_name.sql自定义宏,该宏会强制覆盖所有模型的数据库生成逻辑,如果宏内逻辑返回了target.name,调整宏逻辑符合你的使用需求即可。 - 第四步:清空缓存重跑
所有配置修改完成后,先执行dbt clean清空历史编译缓存,再重新运行dbt命令即可正常将模型物化到ANALYTICS数据库的DEV_THEDRE schema下。
内容的提问来源于stack exchange,提问作者thedre
相关产品推荐
相关产品推荐

