clockworklabs/SpacetimeDB · error · anyhow::Error
Multiple databases found in config: {}. Please specify which
Error message
Multiple databases found in config: {}. Please specify which database to query:\n spacetime sql <database> \"{}\" What it means
From `spacetime sql` argument resolution: you passed a single argument that contains a space (almost certainly the SQL query, so no positional database can be inferred), and the project/config exposes more than one database target, so the CLI cannot pick a default. It lists the known databases and echoes your query back in the suggested command.
Source
Thrown at crates/cli/src/subcommands/sql.rs:265
"query",
"spacetime sql [database] <query> [--no-config]",
)
.or_else(|e| {
// `sql` expects exactly 1 query arg, so if we have 2+ positional args the first
// must be a database name. If it didn't match any config target, treat it as an
// ad-hoc database outside the project (auto-fallthrough).
if raw_parts.len() >= 2 {
Ok(ResolvedDbArgs {
database: raw_parts[0].clone(),
server: None,
remaining_args: raw_parts[1..].to_vec(),
})
} else if raw_parts.len() == 1 && raw_parts[0].contains(' ') {
// The single arg contains spaces, so it's almost certainly a SQL query,
// not a database name. Give a clearer error than "missing <query>".
let targets = config_targets.as_deref().unwrap_or_default();
let known: Vec<&str> = targets.iter().map(|t| t.database.as_str()).collect();
Err(anyhow::anyhow!(
"Multiple databases found in config: {}. Please specify which database to query:\n \
spacetime sql <database> \"{}\"",
known.join(", "),
raw_parts[0]
))
} else {
Err(e)
}
})?;
let query = resolved.remaining_args.join(" ");
let confirmed = args.get_one::<bool>("confirmed").copied();
let con = parse_req(config, args, &resolved.database, resolved.server.as_deref()).await?;
let mut api = ClientApi::new(con).sql();
if let Some(confirmed) = confirmed {
api = api.query(&[("confirmed", if confirmed { "true" } else { "false" })]);
}
View on GitHub (pinned to 6dee26c6ef)
Solutions
- Name the database explicitly: `spacetime sql <database> "SELECT ..."` exactly as printed in the error
- Reduce the project config to a single default database if one is canonical
- In scripts, always pass <database> positionally instead of relying on auto-detection
Example fix
# before spacetime sql "SELECT * FROM player" # after spacetime sql my_game "SELECT * FROM player"
Defensive patterns
Strategy: validation
Validate before calling
# bash: always pass the database positionally in scripts
DB="${SPACETIME_DB:?set SPACETIME_DB to the target database}"
spacetime sql "$DB" "SELECT * FROM player" Prevention
- Never rely on single-database auto-detection in projects that declare multiple targets
- Set an explicit default database in spacetime.json for interactive use, and pass <database> explicitly in CI
When it happens
Trigger: `spacetime sql "SELECT * FROM t"` (query only, no database) while the detected project config declares multiple database targets; any one-argument invocation whose argument contains a space when config_targets has 2+ entries.
Common situations: Monorepos/workspaces with several databases in one project; switching between databases in the same checkout; CI scripts written when only one database existed and later a second was added.
Related errors
- Server already configured for host: {host}
- Nickname {} conflicts with saved configuration for server {}
- Host {} conflicts with saved configuration for server {}: {}
- Too many positional arguments for interactive mode. Usage: s
- Unable to parse invalid saved server fingerprint as ECDSA pu
AI-assisted analysis of clockworklabs/SpacetimeDB@6dee26c6ef (2026-08-20).
Data as JSON: /api/errors/35c2a0d476cea053.
Report an issue: GitHub.