◾️はじめに
https://dk521123.hatenablog.com/entry/2025/05/22/143541
で、GitHub Copilotについて扱ったが、 早速、GitHub Copilot chat で、 以前から発生していたエラー「Cross-db references not allowed in postgres」 について聞いてみたら、素晴らしい解決案を教えてもらったのでメモ。
【1】現象概要
環境
ローカル開発環境は、PostgreSQLを使っていて それ以外の本番環境は、Snowflakeを使っている。 その差を埋めるために、dbt を使っている。
現象
DBを固定で持たせているモデルがあるプロジェクトに対して dbt seedコマンドを実行したところ、 以下「【2】エラー内容」が表示され、失敗する
【2】エラー内容
ERROR: Cross-db references not allowed in postgres (XXXX vs postgres) XXXX: DB name (e.g. another_db)
【3】原因
Snowflake は、異なるDBがあっても特に問題ないが PostgreSQL での異なるDBからのアクセスは許されていない
【4】解決案
案1:モデル自体を +enabled で切り替える
config.enabled + target.type で Snowflakeだけしか有効にしないように切り替える
models/snowflake_only_model.sql
{{ config( database="another_db", schema="demo_schema", alias="demo_table", enabled=(target.type == 'snowflake') ) }} select ...
案2:ローカル用・本番用でファイルを分ける
models/snowflake/ や models/local/ のようにディレクトリを分けて、 dbt_project.ymlの models: セクションで、target.nameで有効/無効を切り替える。
dbt_project.yml
models: my_project: snowflake: +enabled: "{{ target.type == 'snowflake' }}" local: +enabled: "{{ target.type == 'postgres' }}"
【5】補足:--excludeオプションについて
dbt seed --exclude で除外しようと思ったがうまくいかなかった
GitHub Copilot からの回答
dbt seed --exclude で除外できるのは「seed(CSV)」だけです。 → モデル(SQLファイル)は dbt seed では実行も無視もされません。
関連記事
dbt ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/06/30/000000
dbt ~ 環境設定編 ~
https://dk521123.hatenablog.com/entry/2023/12/16/152147
dbt ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/05/30/151003
dbt ~ target ~
https://dk521123.hatenablog.com/entry/2025/05/10/232636
dbt ~ config ~
https://dk521123.hatenablog.com/entry/2025/05/11/024449
dbt CLI ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/07/21/234811
dbt CLI ~ シード / dbt seed ~
https://dk521123.hatenablog.com/entry/2025/04/18/141109
GitHub Copilot 〜 基礎知識編 〜
https://dk521123.hatenablog.com/entry/2025/05/22/143541