Tôi đang theo dõi question that I asked earlier trong đó tôi tìm cách chuyển đổi từ truy vấn mysql bị lỗi/kém bằng văn bản sang postgresql. Tôi tin rằng tôi đã thành công với điều đó. Dù sao, tôi đang sử dụng dữ liệu được di chuyển thủ công từ một cơ sở dữ liệu mysql đến một cơ sở dữ liệu postgres. Tôi đang sử dụng truy vấn trông giống như vậy:Tính toàn vẹnGiá trị khóa trùng lặp lỗi vi phạm ràng buộc duy nhất - django/postgres
"""
UPDATE krypdos_coderound cru
set is_correct = case
when t.kv_values1 = t.kv_values2 then True
else False
end
from
(select cr.id,
array_agg(
case when kv1.code_round_id = cr.id
then kv1.option_id
else null end
) as kv_values1,
array_agg(
case when kv2.code_round_id = cr_m.id
then kv2.option_id
else null end
) as kv_values2
from krypdos_coderound cr
join krypdos_value kv1 on kv1.code_round_id = cr.id
join krypdos_coderound cr_m
on cr_m.object_id=cr.object_id
and cr_m.content_type_id =cr.content_type_id
join krypdos_value kv2 on kv2.code_round_id = cr_m.id
WHERE
cr.is_master= False
AND cr_m.is_master= True
AND cr.object_id=%s
AND cr.content_type_id=%s
GROUP BY cr.id
) t
where t.id = cru.id
""" % (self.object_id, self.content_type.id)
)
Tôi có lý do để tin rằng điều này hoạt động tốt. Tuy nhiên, điều này đã dẫn đến một vấn đề mới. Khi cố gắng để gửi, tôi nhận được một lỗi từ django cho biết: Thao
IntegrityError at (some url):
duplicate key value violates unique constraint "krypdos_value_pkey"
Tôi đã xem xét một số các câu trả lời được đăng trên đây và tôi đã không hoàn toàn tìm thấy giải pháp cho vấn đề của tôi (mặc dù các câu hỏi có liên quan đã thực hiện cho một số đọc thú vị). Tôi thấy điều này trong nhật ký của tôi, đó là thú vị bởi vì tôi không bao giờ dứt khoát gọi Insert- django phải xử lý nó:
STATEMENT: INSERT INTO "krypdos_value" ("code_round_id", "variable_id", "option_id", "confidence", "freetext")
VALUES (1105935, 11, 55, NULL, E'')
RETURNING "krypdos_value"."id"
Tuy nhiên, cố gắng chạy có kết quả trong các lỗi khóa trùng lặp. Lỗi thực tế được ném vào mã bên dưới.
# Delete current coding CodeRound.objects.filter(object_id=o.id,content_type=object_type,is_master=True).delete()
code_round = CodeRound(object_id=o.id,content_type=object_type,coded_by=request.user,comments=request.POST.get('_comments',None),is_master=True)
code_round.save()
for key in request.POST.keys():
if key[0] != '_' or key != 'csrfmiddlewaretoken':
options = request.POST.getlist(key)
for option in options:
Value(code_round=code_round,variable_id=key,option_id=option,confidence=request.POST.get('_confidence_'+key, None)).save() #This is where it dies
# Resave to set is_correct
code_round.save()
o.status = '3'
o.save(
Tôi đã kiểm tra chuỗi và thứ tự như vậy và chúng dường như theo thứ tự. Tại thời điểm này tôi không chắc chắn phải làm gì- Tôi cho rằng đó là một cái gì đó vào cuối django nhưng tôi không chắc chắn. Bất kỳ thông tin phản hồi sẽ được nhiều đánh giá cao!
Một bên: Theo luật của De Morgan, điều kiện của bạn là 'chìa khóa [0]! =' _ 'Hoặc khóa!= 'csrfmiddlewaretoken'' tương đương với' không (khóa [0] == '_' và khóa == 'csrfmiddlewaretoken') '. Nó sẽ dễ dàng thấy rằng tình trạng bên trong không bao giờ thỏa mãn, vì vậy nó tương đương với 'không (Sai)', hay nói cách khác là 'Đúng'. Nhưng tại sao lại bận tâm với 'if'? –
'python manage.py sqlsequencereset | python manage.py dbshell' –
Medorator
Câu trả lời trước này cung cấp chi tiết và ánh sáng chi tiết hơn về chủ đề: http://stackoverflow.com/questions/244243/how-to-reset-postgres-primary-key-sequence-when-it-falls -out-of-sync – RedSands