dbt-labs/dbt-core · warning
Configuration changes were identified and…
Error message
Configuration changes were identified and `on_configuration_change` was set to `continue` for `{target_relation.render()}` What it means
During the materialized view materialization, when a relation's configuration has changed but `on_configuration_change` is set to 'continue', dbt skips applying those changes and issues this warning naming the affected relation. The existing relation is left as-is (build_sql is set to ''), so the materialization makes no configuration updates.
Solutions
- Set `on_configuration_change: apply` in the model config so dbt applies the pending configuration changes via ALTER.
- Or set it to `fail` if you want the run to error loudly whenever configuration drift is detected.
- If 'continue' is intentional, acknowledge the warning — the relation will not pick up the config changes until a full rebuild.
Example fix
// before config: materialized: materialized_view on_configuration_change: continue // after config: materialized: materialized_view on_configuration_change: apply
Defensive patterns
Strategy: validation
Validate before calling
# Before deploying, diff the model config against the deployed relation # dbt: run `dbt compile` and compare to # `dbt run-operation get_materialized_view_config --args 'relation_name: ...'` # Choose on_configuration_change deliberately: apply|skip|fail|continue
Prevention
- Set on_configuration_change explicitly (prefer 'apply' or 'fail') rather than relying on defaults.
- In CI, use 'fail' so config drift surfaces loudly instead of silently continuing.
- Schedule full rebuilds when intentional config changes should land on materialized views.
When it happens
Trigger: Running a materialized view model where the model config differs from the existing relation's config AND `on_configuration_change: continue` is set; the macro enters the `continue` branch, sets build_sql to the empty string, and warns.
Common situations: Deliberately choosing 'continue' in CI/production to avoid expensive rebuilds while noting drift; forgetting to switch back to 'apply' after debugging; inherited configs where the default was left as 'continue'.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- config requires all arguments to be defined, but
- Configuration changes were identified and…
- Detected columns with numeric type and unspecified…
- error while loading local materialized view config
- Found ` ` volatility specified on function ` `. This…
AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07).
Data as JSON: /api/errors/ec76c01e53ba053c.
Report an issue: GitHub.
Appendix: source
Thrown at crates/dbt-loader/src/dbt_macro_assets/dbt-adapters/macros/materializations/models/materialized_view.sql:77
-- determine the scenario we're in: create, full_refresh, alter, refresh data
{% if existing_relation is none %}
{% set build_sql = get_create_materialized_view_as_sql(target_relation, sql) %}
{% elif full_refresh_mode or not existing_relation.is_materialized_view %}
{% set build_sql = get_replace_sql(existing_relation, target_relation, sql) %}
{% else %}
-- get config options
{% set on_configuration_change = config.get('on_configuration_change', 'apply') %} {# DIVERGENCE: core does not default to `apply` here because it sets it elsewhere in the Python code #}
{% set configuration_changes = get_materialized_view_configuration_changes(existing_relation, config) %}
{% if configuration_changes is none %}
{% set build_sql = refresh_materialized_view(target_relation) %}
{% elif on_configuration_change == 'apply' %}
{% set build_sql = get_alter_materialized_view_as_sql(target_relation, configuration_changes, sql, existing_relation, backup_relation, intermediate_relation) %}
{% elif on_configuration_change == 'continue' %}
{% set build_sql = '' %}
{{ exceptions.warn("Configuration changes were identified and `on_configuration_change` was set to `continue` for `" ~ target_relation.render() ~ "`") }}
{% elif on_configuration_change == 'fail' %}
{{ exceptions.raise_fail_fast_error("Configuration changes were identified and `on_configuration_change` was set to `fail` for `" ~ target_relation.render() ~ "`") }}
{% else %}
-- this only happens if the user provides a value other than `apply`, 'skip', 'fail'
{{ exceptions.raise_compiler_error("Unexpected configuration scenario") }}
{% endif %}
{% endif %}
{% do return(build_sql) %}
{% endmacro %}
-- funcsign: (relation) -> string
{% macro materialized_view_execute_no_op(target_relation) %}View on GitHub (pinned to 0267ce9170)