Pembacaan yang konsisten tidak didukung pada indeks sekunder global

TL;DR — Anda menyetel ConsistentRead: true pada Query atau Scan yang menargetkan indeks sekunder global. GSI mereplikasi dari tabel dasar secara asinkron dan hanya menyajikan pembacaan yang konsisten — tandanya adalah kesalahan besar, bukan preferensi. Hilangkan tandanya, atau jika Anda benar-benar membutuhkan konsistensi baca-setelah-tulis, baca tabel dasar (atau rancang kunci ke dalam LSI).

Apa artinya

ValidationException: Consistent reads are not supported on global secondary indexes

Indeks sekunder Lokal berbeda: LSI berbagi partisi dengan tabel dasar, sehingga ConsistentRead: true didukung di sana.

Mengapa itu terjadi

  • Bendera disetel secara global — pembantu kueri bersama atau pembungkus klien menetapkan default ConsistentRead: true untuk setiap pembacaan, dan satu jalur panggilan menambahkan IndexName yang menunjuk ke GSI.
  • LSI menjadi GSI — kode yang ditulis untuk indeks lokal (yang benderanya legal) diarahkan ke indeks global.
  • Salin-tempel kueri tabel dasar — kueri yang secara sah menggunakan konsistensi kuat pada tabel digunakan kembali dengan tambahan IndexName.

Bagaimana cara memperbaikinya

  1. Hapus ConsistentRead dari pembacaan GSI (atau setel ke false — default):

    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'}}
      })
    );
  2. Perlu baca-setelah-tulis? Kueri tabel dasar dengan ConsistentRead: true — dapat dilakukan setiap kali kunci yang Anda cari adalah kunci partisi tabel itu sendiri.

  3. Kunci partisi yang sama, jenis berbeda? Modelkan sebagai LSI (dibuat saat pembuatan tabel), yang mendukung pembacaan yang konsisten.

  4. Atau menyerap kelambatan dalam aplikasi — Propagasi GSI biasanya cepat; untuk alur UI, mengembalikan data yang baru saja Anda tulis lebih cepat daripada membaca ulang indeks.

  5. Audit pembantu kueri bersama. ConsistentRead: true default pada setiap pembacaan terhenti saat jalur panggilan mana pun menambahkan GSI IndexName.

Cek di DynoTable

DynoTable mengetahui indeks mana yang merupakan GSI vs LSI — kueri GSI tidak pernah mengirimkan ConsistentRead: true. Buka tabel dengan ⌘K, pilih indeks dari dropdown, dan jalankan kueri tanpa tanda.

Saat Anda memerlukan baca-setelah-tulis, lakukan kueri pada tabel dasar — Pembuat Kueri menghasilkan parameter yang benar per target. Ganti profil dengan ⌘P; lihat Menghubungkan ke AWS dan Instal.

Sumber

Kesalahan terkait

Referensi

Terakhir diverifikasi 13-07-2026 terhadap dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.