influxdata/influxdb · error · Error::MultiDatabase
can only perform queries on a single database
Error message
can only perform queries on a single database
What it means
Error::MultiDatabase from iox_query_influxql_rewrite: raised when parsed statements reference more than one database. IOx InfluxQL rewriting only supports queries scoped to a single database per request.
Solutions
- Split the request into one request per database
- Remove explicit database qualifiers so all statements use the request's single database
- Validate target databases of all statements before submission
Example fix
// before
parse_statements("SELECT * FROM db1.m; SELECT * FROM db2.m")?;
// after
parse_statements("SELECT * FROM db1.m")?;
parse_statements("SELECT * FROM db2.m")?; Defensive patterns
Strategy: validation
Validate before calling
let dbs: HashSet<_> = extract_databases(query); if dbs.len() > 1 { /* split request */ } Try / catch
match parse_statements(input) {
Err(Error::MultiDatabase) => split_and_run_per_database(input),
other => other?,
} Prevention
- One database per request
- Avoid explicit database qualifiers when a request database is set
- Lint batched queries for mixed databases
When it happens
Trigger: Submitting multiple InfluxQL statements (or one statement) that target different databases via per-measurement database qualifiers, through parse_statements/parse_internal's rewrite pass.
Common situations: Batching queries copied from different dashboards into one request; queries mixing explicit database qualifiers across measurements; migration scripts concatenating statements for several databases.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- error in InfluxQL statement
- error in InfluxQL statement
- must provide only one InfluxQl statement per query
- All `DataPoints` must have at least one field. Builder…
- Arrow error
AI-assisted analysis of influxdata/influxdb@06200ef96b (2026-09-19).
Data as JSON: /api/errors/5029e4206440f996.
Report an issue: GitHub.
Appendix: source
Thrown at core/iox_query_influxql_rewrite/src/lib.rs:200
if db_rp_set.insert((db, rp)) && db_rp_set.len() > 1 {
Err(Error::MultiDatabase)
} else {
Ok(ms)
}
})
.collect::<Result<Vec<MeasurementSelection>, Error>>()?;
select_statement.from.replace(from_clause);
let mut result = Self::new(select_statement);
if let Some((db, rp)) = db_rp_set.into_iter().next() {
result = result.with_database(db).with_retention_policy(rp);
}
Ok(result)
}
}
#[derive(Debug, thiserror::Error, Clone, PartialEq, Eq)]
pub enum Error {
#[error("can only perform queries on a single database")]
MultiDatabase,
#[error("parsing error: {0}")]
Parse(ParseError),
}
pub fn parse_statements(input: &str) -> Result<Vec<Rewritten<Statement>>, Error> {
parse_internal(input)
.map_err(Error::Parse)?
.into_iter()
.map(Rewritten::<Statement>::try_from)
.collect::<Result<Vec<Rewritten<Statement>>, Error>>()
}
#[cfg(test)]
mod tests {
use influxdb_influxql_parser::statement::Statement;
use crate::{Error, Rewritten, parse_statements};View on GitHub (pinned to 06200ef96b)