PostgreSQL'e bir tabloya yeni bir kayıt eklerken aşağıdaki hatayı almaya başladım.
ERROR: duplicate key value violates unique constraint
Bu hata, eklemeye çalıştığım satır içindeki bir alanın benzersiz olduğunu ve daha önce benzer bir satır eklediğimi söylüyordu. İşin ilginç tarafı, eklemeye çalıştığım veri içerisinde unique bir alan yoktu. Jeton, daha sonra düştü. Otomatik artan olarak belirlenmiş ve veri tabanının kendi oluşturduğu ID numarasının zaten var olduğunu söylüyordu. Bunun bir senkronizasyon hatası olduğunu anladım.
Daha çok, DB'ye dışarıdan toplu veri aktarma gibi durumlarda karşılaştığımız bu durum, ID numarasının hatalı ölçülmesi kaynaklı bir durumdu.
Test etmek için aşağıdaki komutu çalıştırıyoruz.
SELECT CURRVAL(PG_GET_SERIAL_SEQUENCE('"tablo_adi"', 'id')) AS "Current Value", MAX("id") AS "Max Value" FROM "tablo_adi";
Eğer Current Value, Max Value değerine eşit değilse senkronizasyon problemi var demektir. Çözümü ise basit, aşağıdaki komutun çalıştırılması kafi.
SELECT SETVAL((SELECT PG_GET_SERIAL_SEQUENCE('"tablo_adi"', 'id')), (SELECT (MAX("id") + 1) FROM "tablo_adi"), FALSE);