apache/cassandra · error · InvalidRequestException
Keyspace name '%s' doesn't match table name '%s'
Error message
Keyspace name '%s' doesn't match table name '%s'
What it means
CREATE INDEX validates that the keyspace explicitly given in the table name matches the resolved keyspace (from table name, index name, or session keyspace). A fully-qualified table name whose keyspace disagrees with the resolved one is rejected as ambiguous/inconsistent.
Source
Thrown at src/java/org/apache/cassandra/cql3/statements/schema/CreateIndexStatement.java:383
List<IndexTarget.Raw> rawIndexTargets,
IndexAttributes attrs,
boolean ifNotExists)
{
this.tableName = tableName;
this.indexName = indexName;
this.rawIndexTargets = rawIndexTargets;
this.attrs = attrs;
this.ifNotExists = ifNotExists;
}
public CreateIndexStatement prepare(ClientState state)
{
String keyspaceName = tableName.hasKeyspace()
? tableName.getKeyspace()
: indexName.hasKeyspace() ? indexName.getKeyspace() : state.getKeyspace();
if (tableName.hasKeyspace() && !keyspaceName.equals(tableName.getKeyspace()))
throw ire(KEYSPACE_DOES_NOT_MATCH_TABLE, keyspaceName, tableName);
if (indexName.hasKeyspace() && !keyspaceName.equals(indexName.getKeyspace()))
throw ire(KEYSPACE_DOES_NOT_MATCH_INDEX, keyspaceName, tableName);
// Set the configured default 2i implementation if one isn't specified with USING:
if (attrs.customClass == null)
{
if (DatabaseDescriptor.getDefaultSecondaryIndexEnabled())
attrs.customClass = DatabaseDescriptor.getDefaultSecondaryIndex();
else
// However, operators may require an implementation be specified
throw ire(MUST_SPECIFY_INDEX_IMPLEMENTATION);
}
// If we explicitly specify the index type "legacy_local_table", we can just clear the custom class, and the
// non-custom 2i creation process will begin. Otherwise, if an index type has been specified with
// USING, make sure the appropriate custom index is created.
if (attrs.customClass != null)View on GitHub (pinned to 88fd0f6a0e)
Solutions
- Remove the keyspace qualifier from the table name, or make it match the session keyspace.
- Fully qualify BOTH the table and the index with the same keyspace: CREATE INDEX ks.idx ON ks.t(col).
- Fix the cqlsh/script session: USE <correct_keyspace>; before running the statement.
Example fix
// before (session is on ks2) CREATE INDEX ON ks1.t (col); // after USE ks1; CREATE INDEX ON t (col);
Defensive patterns
Strategy: validation
Validate before calling
if (tableName.includesKeyspace() && session.getLoggedKeyspace() != null && !tableName.getKeyspace().equals(session.getLoggedKeyspace())) throw new IllegalArgumentException("Table keyspace disagrees with session keyspace"); Try / catch
try { session.execute(ddl); } catch (InvalidQueryException e) { if (e.getMessage().startsWith("Keyspace name")) { /* strip keyspace qualifiers or align with USE */ } else throw e; } Prevention
- Always fully qualify both table and index with the same keyspace
- Avoid mixing USE-keyspace sessions with qualified identifiers in scripts
- Templatize keyspaces with a single variable in generated DDL
When it happens
Trigger: Run e.g. `CREATE INDEX ON otherks.t (col)` while the statement resolves a different keyspaceName — specifically when tableName.hasKeyspace() and that keyspace differs from the computed keyspaceName (which can come from the index name or the session's USE keyspace).
Common situations: Copy-pasting a statement from one environment/namespace to another; scripts with a hardcoded keyspace in the table name executed against a session connected to a different keyspace; confusion between keyspace qualifiers on the table vs index name.
Understand the failure class
Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.
Related errors
- Keyspace name '%s' doesn't match index name '%s'
- Keyspace %s doesn't exist
- Missing mandatory option '%s'
- Unable to use given strategy class: LocalStrategy is reserve
- Can not create a keyspace with MetaReplicationStrategy
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/6a0be2cb3370a5a7.
Report an issue: GitHub.