【dbt】dbt seed 実行後、エラー「Cross-db references not allowed in postgres」が発生

◾️はじめに

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