[解決済み] IntegrityError 重複するキー値は一意制約に違反する - django/postgres
2023-07-24 13:38:44
質問
に関してフォローアップしています。 の質問に関してフォローアップしています。 で、私はおかしな/貧弱に書かれたmysqlクエリからpostgresqlへの変換を求めました。私はそれで成功したと信じています。とにかく、私はmysqlデータベースから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)
)
これがうまく機能すると信じるに足る理由があります。しかし、これが新たな問題を引き起こしています。投稿しようとすると、django から次のようなエラーが表示されます。
IntegrityError at (some url):
duplicate key value violates unique constraint "krypdos_value_pkey"
ここに投稿されたいくつかの回答を見ましたが、私の問題に対する解決策はまだ見つかっていません (関連する質問はいくつか興味深い読み物になっていますが)。私はログでこれを見ましたが、私は明示的に挿入を呼び出したことがないので、これは興味深いことです-djangoはそれを処理しなければなりません。
STATEMENT: INSERT INTO "krypdos_value" ("code_round_id", "variable_id", "option_id", "confidence", "freetext")
VALUES (1105935, 11, 55, NULL, E'')
RETURNING "krypdos_value"."id"
しかし、これを実行しようとすると、キーが重複しているというエラーが発生します。実際のエラーは、以下のコードで投げられています。
# 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(
配列などを確認したところ、順当なようです。この時点で、私は何をすべきかわからない - 私はdjango側の何かだと仮定しますが、私はよくわかりません。何かフィードバックがあれば、とてもありがたいです。
どのように解決するのですか?
Postgres の主キーフィールドを再同期する必要があることがわかりました。キーはSQLステートメントです。
SELECT setval('tablename_id_seq', (SELECT MAX(id) FROM tablename)+1);
関連
-
Djangoの基本(16)。テンプレートタグの紹介とそのカスタマイズ方法
-
オペレーショナルエラーです。1050 解決
-
[解決済み] MySQLで複数のカラムに一意制約を指定するには?
-
[解決済み] MySQLで外部キー制約を一時的に無効にするにはどうすればよいですか?
-
[解決済み] postgres の主キー配列が同期しなくなったときにリセットする方法は?
-
[解決済み】Postgresの一意制約とインデックス
-
[解決済み] Django South - テーブルはすでに存在する
-
[解決済み] Django のモデルで電話番号を保存する最良の方法は何ですか?
-
[解決済み] 学習に適したオープンソースのdjangoプロジェクト【非公開
-
[解決済み] Djangoで異なる設定でUnitテストを行うには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
6.5、Django - モデルでJSONFieldを使用してJSONフィールドでMySQLテーブルを作成する
-
Djangoキャッシュの説明
-
ImproperlyConfiguredです。INSTALLED_APPS の設定を要求されたが、設定されていない
-
[解決済み] postgres の主キー配列が同期しなくなったときにリセットする方法は?
-
[解決済み] QuerySetで空白またはNULLの名前をフィルタリングする方法は?
-
[解決済み] Djangoのテンプレートからsettings.pyの定数にアクセスすることは可能ですか?
-
[解決済み] Django-Rest-Framework のシリアライザーで Request.User を取得する方法とは?
-
[解決済み] Django でモデルのフィールドを取得する
-
[解決済み] Django Forms: 有効でない場合、エラーメッセージとともにフォームを表示する
-
[解決済み] Django で https 接続を非 https 接続と同じように簡単にテストするには 'runserver' を使うには?