{"record":{"id":"5029e4206440f996","repo":"influxdata/influxdb","slug":"can-only-perform-queries-on-a-single-database","errorCode":null,"errorMessage":"can only perform queries on a single database","messagePattern":"can only perform queries on a single database","errorType":"error_code","errorClass":"Error::MultiDatabase","httpStatus":null,"severity":"error","filePath":"core/iox_query_influxql_rewrite/src/lib.rs","lineNumber":200,"sourceCode":"                if db_rp_set.insert((db, rp)) && db_rp_set.len() > 1 {\n                    Err(Error::MultiDatabase)\n                } else {\n                    Ok(ms)\n                }\n            })\n            .collect::<Result<Vec<MeasurementSelection>, Error>>()?;\n        select_statement.from.replace(from_clause);\n        let mut result = Self::new(select_statement);\n        if let Some((db, rp)) = db_rp_set.into_iter().next() {\n            result = result.with_database(db).with_retention_policy(rp);\n        }\n        Ok(result)\n    }\n}\n\n#[derive(Debug, thiserror::Error, Clone, PartialEq, Eq)]\npub enum Error {\n    #[error(\"can only perform queries on a single database\")]\n    MultiDatabase,\n    #[error(\"parsing error: {0}\")]\n    Parse(ParseError),\n}\n\npub fn parse_statements(input: &str) -> Result<Vec<Rewritten<Statement>>, Error> {\n    parse_internal(input)\n        .map_err(Error::Parse)?\n        .into_iter()\n        .map(Rewritten::<Statement>::try_from)\n        .collect::<Result<Vec<Rewritten<Statement>>, Error>>()\n}\n\n#[cfg(test)]\nmod tests {\n    use influxdb_influxql_parser::statement::Statement;\n\n    use crate::{Error, Rewritten, parse_statements};","sourceCodeStart":182,"sourceCodeEnd":218,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/core/iox_query_influxql_rewrite/src/lib.rs#L182-L218","documentation":"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.","triggerScenarios":"Submitting multiple InfluxQL statements (or one statement) that target different databases via per-measurement database qualifiers, through parse_statements/parse_internal's rewrite pass.","commonSituations":"Batching queries copied from different dashboards into one request; queries mixing explicit database qualifiers across measurements; migration scripts concatenating statements for several databases.","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"],"exampleFix":"// before\nparse_statements(\"SELECT * FROM db1.m; SELECT * FROM db2.m\")?;\n// after\nparse_statements(\"SELECT * FROM db1.m\")?;\nparse_statements(\"SELECT * FROM db2.m\")?;","handlingStrategy":"validation","validationCode":"let dbs: HashSet<_> = extract_databases(query); if dbs.len() > 1 { /* split request */ }","typeGuard":null,"tryCatchPattern":"match parse_statements(input) {\n    Err(Error::MultiDatabase) => split_and_run_per_database(input),\n    other => other?,\n}","preventionTips":["One database per request","Avoid explicit database qualifiers when a request database is set","Lint batched queries for mixed databases"],"tags":["influxql","multi-database","rewrite","validation"],"backgroundTag":"unsupported-operation","analyzedSha":"06200ef96ba82c5f6727e5038a83af8e722c6875","analyzedAt":"2026-09-19T12:55:30.003Z","contentChangedAt":"2026-09-19T12:55:30.003Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}