The table does not have the specified index

TL;DR — 你 Query/Scan 中的 IndexName 在那张表上(从这个客户端的区域 + 账户看)不存在、拼写错误,或者该 GSI 仍在 CREATING 且还不可查询。用 DescribeTable 确认确切的索引名称和状态,然后修复调用。

含义

ValidationException: The table does not have the specified index: <IndexName>

# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: The table does not have the specified index: no-such-index

你让 DynamoDB 按名称 QueryScan 一个特定的二级索引,而表(在这个客户端看来)没有一个处于可用状态的同名索引。它是一个 HTTP 400 ValidationException——属于客户端错误,在名称/状态正确之前不可重试

为什么会发生

  • 拼写错误或大小写错误——索引名称区分大小写;GSI1gsi1
  • 索引属于另一张表——你从另一张表的模式复制了 IndexName
  • GSI 还未 ACTIVE——一个新创建的全局二级索引在其状态从 CREATING → ACTIVE 之前无法查询(它会先回填)。
  • 区域/账户错误——客户端指向了一个表(或其索引)不存在的区域(与缺失的表相同的对齐问题)。
  • DynamoDB Local 偏差——一个早于该索引的陈旧本地 shared-local-instance.db;重新创建它。

如何修复

  1. 列出真实的索引名称和状态:
    aws dynamodb describe-table --table-name <Table> \
      --query "Table.GlobalSecondaryIndexes[].{Name:IndexName,Status:IndexStatus}"
  2. 把名称逐字复制IndexName——精确匹配大小写。
  3. 等待 ACTIVE 如果 GSI 处于 CREATING,查询只有在回填完成后才有效(DescribeTable 会显示 IndexStatus)。
  4. aws sts get-caller-identity 确认区域 + 账户,并固定客户端的 region
  5. 在 DynamoDB Local 上,删除本地 db 文件并重新运行你的表/索引设置,使索引在本地存在。

在多张表和索引之间工作?DynoTable 的 Table 对话框会列出每张表的 GSI 及其状态,让你能挑一个确实存在——且处于 ACTIVE——的索引,而不是猜名称。当你需要的索引确实不存在时,它还能创建和删除 GSI

在 DynoTable 中查询

使用 ⌘K 打开 DynoTable 中的表并展开 索引 面板 - 每个 GSI 名称和 IndexStatus 都会在没有 CLI 调用的情况下列出。从查询面板的下拉列表中选择索引,而不是手动输入 IndexName; DynoTable 仅提供连接表上存在的索引。如果GSI仍然是CREATING,则从侧边栏刷新表元数据,直到状态翻转到ACTIVE。使用 Query Builder 组成 GSI 查询并将生成的 IndexName 复制到你的 SDK 代码中。当索引存在于一个区域而不是另一个区域时,使用 ⌘P 切换配置文件。设置:连接 AWS安装

来源

相关错误

参考资料

最后核实于 2026-07-13,依据上方链接的 AWS 官方文档。

无需控制台即可使用 DynamoDB

一款快速的 DynamoDB 桌面客户端,可运行 DynamoDB 无法执行的真正 SQL——JOINs、GROUP BY、聚合——并支持可视化编辑和运行在你自己的 Bedrock 密钥上的 AI agent。

30 天免费试用,无需信用卡 — 之后为无时间限制的免费版。