Menyelesaikan Konflik Urutan Kunci Utama PostgreSQL
Kegagalan memasukkan data disebabkan ralat kunci pendua selalunya menunjukkan jujukan kunci utama tidak segerak dengan baris jadual. Ini biasanya berlaku selepas proses import atau pemulihan pangkalan data. Begini cara untuk membetulkannya:
Sahkan Ketidakseimbangan Urutan:
Pertama, tentukan ID sedia ada tertinggi:
<code class="language-sql">SELECT MAX(id) FROM your_table;</code>
Periksa Nombor Urutan Seterusnya:
Seterusnya, semak nilai urutan seterusnya:
<code class="language-sql">SELECT nextval('your_table_id_seq');</code>
Jika nilai jujukan kurang daripada ID maksimum jadual, penyegerakan diperlukan.
Mulakan Transaksi:
Balut pembetulan dalam transaksi untuk integriti data:
<code class="language-sql">BEGIN;</code>
Kunci Meja Eksklusif:
Untuk mengelakkan pengubahsuaian serentak, kunci jadual secara eksklusif:
<code class="language-sql">LOCK TABLE your_table IN EXCLUSIVE MODE;</code>
Laraskan Nilai Jujukan:
Gunakan arahan ini untuk mengemas kini urutan:
<code class="language-sql">SELECT setval('your_table_id_seq', GREATEST((SELECT MAX(your_id) FROM your_table), (SELECT nextval('your_table_id_seq') - 1)));</code>
Ini menetapkan jujukan kepada ID maksimum jadual yang lebih besar atau nilai jujukan semasa tolak satu.
Komit Transaksi:
Tamatkan perubahan:
<code class="language-sql">COMMIT;</code>
Lepaskan Kunci Meja:
Kunci meja dilepaskan secara automatik selepas transaksi dilakukan.
Mengikut langkah ini memastikan jujukan kunci utama sejajar dengan data jadual, menghapuskan ralat kunci pendua masa hadapan semasa sisipan.
Atas ialah kandungan terperinci Bagaimanakah Saya Menyegerakkan Semula Urutan Kunci Utama PostgreSQL Tidak Segerak dengan Baris Jadual?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!