dbt-labs/dbt-core · error
enrich constraints must be iterable
Error message
enrich constraints must be iterable: {e} What it means
The constraints argument passed to relation_enrich cannot be iterated — try_iter failed, meaning the value is not a Jinja sequence/list (e.g. a single object or undefined), so it cannot be converted into Vec<TypedConstraint>.
Solutions
- Pass constraints as a list of constraint objects from the model contract
- Guard with an is-iterable check in the macro before calling enrich
- Coerce single values into a one-element list
Defensive patterns
Strategy: type-guard
When it happens
Trigger: Thrown at crates/dbt-adapter/src/relation/relation_object.rs:109 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07).
Data as JSON: /api/errors/66312a0621d2a9e0.
Report an issue: GitHub.
Appendix: source
Thrown at crates/dbt-adapter/src/relation/relation_object.rs:109
}
/// Databricks: enrich relation with constraints (for get_column_and_constraints_sql)
fn relation_enrich(self: &Arc<Self>, args: &[Value]) -> Result<Value, minijinja::Error> {
let dbx = self
.relation
.as_any()
.downcast_ref::<Relation>()
.ok_or_else(|| {
minijinja::Error::new(
minijinja::ErrorKind::InvalidOperation,
"enrich is only available for Databricks relations",
)
})?;
let constraints_val = args.first().cloned().unwrap_or_default();
let constraints: Vec<TypedConstraint> = constraints_val
.try_iter()
.map_err(|e| {
minijinja::Error::new(
minijinja::ErrorKind::InvalidOperation,
format!("enrich constraints must be iterable: {e}"),
)
})?
.map(|v| {
v.downcast_object_ref::<TypedConstraint>()
.cloned()
.ok_or_else(|| {
minijinja::Error::new(
minijinja::ErrorKind::InvalidOperation,
"enrich constraints must contain TypedConstraint objects",
)
})
})
.collect::<Result<Vec<_>, _>>()?;
let enriched = dbx.enrich(&constraints);
Ok(RelationObject::new(Arc::new(enriched)).into_value())
}View on GitHub (pinned to 0267ce9170)