{"record":{"id":"2c6aa6a3b32feb2e","repo":"clockworklabs/SpacetimeDB","slug":"no-database-target-matches-available-databas","errorCode":null,"errorMessage":"No database target matches '{}'. Available databases: {}","messagePattern":"No database target matches '(.+?)'\\. Available databases: (.+?)","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/cli/src/subcommands/generate.rs","lineNumber":100,"sourceCode":"\n    // Filter by database name pattern (glob) if provided via CLI\n    let filtered_targets = if let Some(cli_database) = args.get_one::<String>(\"database\") {\n        let pattern =\n            glob::Pattern::new(cli_database).with_context(|| format!(\"Invalid glob pattern: {cli_database}\"))?;\n\n        let matched: Vec<_> = all_targets\n            .into_iter()\n            .filter(|target| {\n                target\n                    .fields\n                    .get(\"database\")\n                    .and_then(|v| v.as_str())\n                    .is_some_and(|db| pattern.matches(db))\n            })\n            .collect();\n\n        if matched.is_empty() {\n            anyhow::bail!(\n                \"No database target matches '{}'. Available databases: {}\",\n                cli_database,\n                spacetime_config\n                    .collect_all_targets_with_inheritance()\n                    .iter()\n                    .filter_map(|t| t.fields.get(\"database\").and_then(|v| v.as_str()))\n                    .collect::<Vec<_>>()\n                    .join(\", \")\n            );\n        }\n\n        matched\n    } else {\n        all_targets\n    };\n\n    // Collect generate entries from matched targets, inheriting entity fields\n    // Deduplicate by (module_path, serialized_generate_entry)","sourceCodeStart":82,"sourceCodeEnd":118,"githubUrl":"https://github.com/clockworklabs/SpacetimeDB/blob/524b4487d949b61a07d4f39c862d1290259dfd20/crates/cli/src/subcommands/generate.rs#L82-L118","documentation":"`spacetime generate --database <selector>` picks the generate targets to run by matching each spacetime.json target's `database` field against a glob pattern. When the pattern matches no target, the CLI aborts and prints every database name it found across all inheritance-merged targets. The glob matcher is the `glob` crate, so `*` and `?` are active characters in the selector.","triggerScenarios":"Running `spacetime generate --database mydb` when no target in spacetime.json (or an inherited parent config) declares `\"database\": \"mydb\"`; a glob like `--database 'prod-*'` that matches nothing; targets that omit the `database` field entirely so the available list comes back empty.","commonSituations":"Typos or renamed databases in spacetime.json; monorepos where targets live in a parent config; configs written before per-target `database` fields existed; scripts that hardcode a database name from another environment.","solutions":["Compare your selector against the 'Available databases: ...' list printed in the error and re-run with an exact name from that list","Add or fix the `database` field on the intended generate target(s) in spacetime.json","Drop `--database` entirely to generate every target","If the available list is empty, your spacetime.json targets lack `database` fields — define them or migrate the config to the database-centric target format"],"exampleFix":"// spacetime.json — before\n{\n  \"generate\": { \"targets\": [ { \"lang\": \"typescript\", \"out-dir\": \"src/generated\" } ] }\n}\n\n// spacetime.json — after\n{\n  \"generate\": { \"targets\": [ { \"database\": \"mydb\", \"lang\": \"typescript\", \"out-dir\": \"src/generated\" } ] }\n}\n\n// then: spacetime generate --database mydb","handlingStrategy":"validation","validationCode":"# Before `spacetime generate --database mydb`, confirm a target declares it:\njq -e '.generate.targets[]? | select((.database // \"\") == \"mydb\")' spacetime.json > /dev/null \\\n  || echo \"WARN: no generate target with database=mydb in spacetime.json\"","typeGuard":null,"tryCatchPattern":"#!/usr/bin/env bash\nif ! spacetime generate --database \"$DB\" 2>err.log; then\n  if grep -q \"No database target matches\" err.log; then\n    echo \"Config drift: '$DB' not declared in spacetime.json (check 'Available databases' in err.log)\" >&2\n    exit 2  # distinct exit code for config errors\n  fi\n  cat err.log >&2\n  exit 1\nfi","preventionTips":["Declare an explicit `database` field on every generate target in spacetime.json","Treat the error's 'Available databases' list as the source of truth before scripting around --database","Remember --database is a glob: quote selectors containing * or ? so the shell doesn't expand them","Validate spacetime.json against the expected target set in CI before invoking generate"],"tags":["generate","spacetime-json","database","glob","target-selection"],"backgroundTag":"no-matching-config-target","analyzedSha":"524b4487d949b61a07d4f39c862d1290259dfd20","analyzedAt":"2026-08-16T23:58:54.611Z","schemaVersion":2},"datasetVersion":"2026-08-17T04:17:16.089Z"}