Consistent reads are not supported on global secondary indexes
요약 — 글로벌** 보조 인덱스를 대상으로 하는 Query 또는 Scan에 ConsistentRead: true를 설정했습니다. GSI는 기본 테이블에서 비동기적으로 복제되며 최종적 일관성 읽기만 제공합니다 — 이 플래그는 선호 사항이 아니라 하드 오류입니다. 플래그를 제거하거나, 진정으로 쓰기 후 읽기 일관성이 필요하다면 기본 테이블을 읽으세요(또는 키를 LSI에 설계하세요).**
무엇을 의미하나요
ValidationException: Consistent reads are not supported on global secondary indexesGSI는 물리적으로 자체 파티션과 용량을 가진 독립적인 인덱스 구조입니다. DynamoDB는 기본 테이블 쓰기를 여기에 비동기적으로 전파합니다. 방금 쓴 항목이 아직 인덱스에 도착하지 않았을 수 있기 때문에, DynamoDB는 그에 대한 강력한 일관성 읽기를 보장할 수 없습니다 — 그래서 GSI IndexName과 결합된 ConsistentRead: true는 즉시 거부됩니다. AWS 문서는 명시적입니다: ConsistentRead를 true로 설정해 GSI를 쿼리하면 ValidationException을 받습니다.
로컬 보조 인덱스는 다릅니다: LSI는 기본 테이블과 파티션을 공유하므로 거기서는 ConsistentRead: true가 지원됩니다.
왜 발생하나요
- 플래그가 전역적으로 설정됨 — 공유 쿼리 헬퍼나 클라이언트 래퍼가 모든 읽기에
ConsistentRead: true를 기본값으로 두는데, 한 호출 경로가 GSI를 가리키는IndexName을 추가합니다. - LSI가 GSI가 됨 — 로컬 인덱스(플래그가 합법인 곳)용으로 작성된 코드가 글로벌 인덱스를 가리켰습니다.
- 복사-붙여넣기한 기본 테이블 쿼리 — 테이블에서 정당하게 강력한 일관성을 사용한 쿼리가
IndexName이 추가된 채 재사용되었습니다.
어떻게 고치나요
GSI 읽기에서
ConsistentRead를 제거하세요(또는 기본값인false로 설정):await client.send( new QueryCommand({ TableName: 'Orders', IndexName: 'status-index', KeyConditionExpression: '#s = :open', // ConsistentRead: true ← delete this line for a GSI ExpressionAttributeNames: {'#s': 'status'}, ExpressionAttributeValues: {':open': {S: 'OPEN'}} }) );쓰기 후 읽기가 필요한가요?
ConsistentRead: true로 기본 테이블을 쿼리하세요 — 조회하는 키가 테이블 자체의 파티션 키일 때 언제나 가능합니다.같은 파티션 키, 다른 정렬? 일관성 읽기를 지원하는 LSI(테이블 생성 시 생성)로 모델링하세요.
또는 애플리케이션에서 지연을 흡수하세요 — GSI 전파는 일반적으로 빠릅니다. UI 흐름의 경우 인덱스를 다시 읽는 것보다 이미 가진 방금 쓴 데이터를 반환하는 것이 낫습니다.
DynoTable 데스크톱 앱은 각 테이블의 인덱스를 보여주고 직접 쿼리하게 해줍니다 — 그리고 어느 인덱스가 글로벌이고 어느 것이 로컬인지 알기 때문에, 이 부류의 오류는 애초에 발생하지 않습니다.
관련 오류
- GSI throttles the base table — GSI의 쓰기 측 결합.
- The table does not have the specified index
- Cannot update GSI while it is being created
- 코드 예제: Query a GSI in Node.js — 올바르게 수행된 최종적 일관성 GSI 쿼리.
- 학습: Why GSIs are eventually consistent · GSI vs LSI · Consistency
References
- Query — Amazon DynamoDB API Reference
- Using Global Secondary Indexes in DynamoDB — Amazon DynamoDB Developer Guide
- Constraints in Amazon DynamoDB — Amazon DynamoDB Developer Guide
공식 AWS 문서(위 링크)를 기준으로 2026-07-13에 마지막으로 검증되었습니다.