dbt-labs/dbt-core · error
Table.rename: slugging columns or rows is not implemented…
Error message
Table.rename: slugging columns or rows is not implemented yet
What it means
Table.rename accepts slug_columns/slug_rows flags (agate's slugification of column or row names), but this Rust port has not implemented slugification yet and refuses the call with an InvalidOperation error rather than silently ignoring the flags.
Solutions
- Set both slug_columns and slug_rows to false.
- Pre-slugify names yourself (lowercase, replace non-alphanumerics with underscores) and pass them via the map form of column_names.
- Track library updates; this is explicitly an unimplemented feature, not a usage error.
Example fix
// before table.rename(Some(names), None, true, false)? // after let slugged: Vec<_> = names.iter().map(|n| slugify(n)).collect(); table.rename(Some(slugged), None, false, false)?
Defensive patterns
Strategy: validation
Validate before calling
if slug_columns || slug_rows {
return Err("slugging not supported; pre-slugify names instead");
} Try / catch
match result {
Err(e) if e.to_string().contains("slugging columns or rows is not implemented") => {
eprintln!("{e}; pre-slugify and pass explicit names");
table.rename(Some(pre_slugged(names)), None, false, false)?
}
other => other?,
} Prevention
- Never pass slug_columns=true or slug_rows=true against this library.
- Slugify names yourself before calling rename.
- Grep ported agate code for slug_columns/slug_rows usages and replace them with explicit name mapping.
When it happens
Trigger: Calling rename with slug_columns=true or slug_rows=true, regardless of the other arguments.
Common situations: Porting Python agate code that relied on slug_columns/slug_rows for snake_case column names; enabling the flags 'just in case' when porting an agate-based workflow to dbt's Rust agate implementation.
Related errors
AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07).
Data as JSON: /api/errors/aa58b8eba300f17b.
Report an issue: GitHub.
Appendix: source
Thrown at crates/dbt-agate/src/table.rs:822
),
));
}
}
if let Some(ref rows) = renamed_rows {
if rows.len() != self.num_rows() {
return Err(Error::new(
ErrorKind::InvalidArgument,
format!(
"Table.rename: renamed_rows length ({}) does not match number of rows ({})",
rows.len(),
self.num_rows()
),
));
}
}
if slug_columns || slug_rows {
return Err(Error::new(
ErrorKind::InvalidOperation,
"Table.rename: slugging columns or rows is not implemented yet",
));
}
let repr = if let Some(renamed_columns) = renamed_columns {
self.repr.with_renamed_columns(renamed_columns)
} else {
Arc::clone(&self.repr)
};
let repr = if let Some(renamed_rows) = renamed_rows {
repr.with_renamed_rows(renamed_rows)
} else {
repr
};
Ok(AgateTable::from_repr(repr))
}View on GitHub (pinned to 0267ce9170)