Eski sunucudaki veritabanında projenin yeni halindeki ortak olan tabloların dump'larını alıp gerekli düzenlemeleri yaptım ve yeni veritabanı sunucusundaki yeni proje veritabanına soktum(!).
İlişki tablolarını falan içeriye soktum, verileri çekebiliyor, listeleyebiliyorum fakat bu eski veritabanından içeriye veri soktuğum(!) tablolara insert yapamıyordum.
django.db.utils.IntegrityError: duplicate key value violates unique constraint "app_model_pkey"Hep bu hatayı alıyordum.
DETAIL: Key (id)=(156) already exists.
Postgresql'e pek aşina olmadığım için ve daha önce böyle bir veritabanı taşıma işi yapmadığım için sorunu uzun bir süre çözemedim. En sonunda stackoverflow'dan girdim, postgresql'in, django'nun dökümantasyonundan çıktım, google'da iki takla, çıkan blog yazılarında bi şpagat derken güzel bir blog'a denk geldim.
Siz de benim gibi bir db taşıma işinden sonra böyle bir problemle karşılaştıysanız sorunuzun cevabını bu yazıda bulabilirsiniz.
Yukarıda belirttiğim şekil bir hata aldınız diyelim. Postgresql veritabanımıza bağlanıp şöyle bir sorgu çalıştıralım.
select max(id) from bahsi_gecen_tablo;
------
sonuç: 1759338
Şimdi aldığımız hata bahsi_gecen_tablo_pkey şeklindeydi ya, sequences bölümünde onu bulalım ve şöyle bir query daha çalıştıralım.
last_value = 1!
select start_value, last_value, max_value from bahsi_gecen_tablo_id_seq;
------
sonuç: start_value = 1, last_value=1, max_value=9223372036854775807
Bir sonraki eklenecek kaydın id'si 1 olmaya çalışıyor, bu id'de daha önceden eklenmiş kaydınız olduğu için size böyle bir hata veriyor işte postgresql. Çözümü ise şu şekilde
şeklinde bir sorgu çalıştırdığımız zaman sorunumuz çözülmüş oluyor.
alter sequence bahsi_gecen_tablo_pkey restart with 1759338; (bahsi geçen tablonun satır sayısı)