duplicate key value violates unique constraintをねじ伏せる(失敗学)
その席は塞がっています
FlutterでFrontSideを改良し、Severpodでendpointを再設定し、
少しでも使いやすいDatabaseができるよう、日々努力しているのだが、
突然、変なエラーが出る。
「そのIdは既に存在しています」
なんだそれ。
ログを見ると、新しいデータをId23に追加しようとている。
けれども、データは既に30まで埋まっている。
31に入れてほしいんですけどねえ。
Idはauto incrementじゃなかったのかい
と文句をつけて、ふと気づく。
あ、手動でデータを足したんだった。
それが認識されてない?
どうやら、ときどき起こるErrorらしく、記事もそれなりにある。
例えば
SQL叩いてもイマイチ?
そもそもPostgreSQLのGUIであるPostico2で、SQLを自発的に叩いたことがない。
table設定の時に、Serverpodが生成するSQLを貼り付ける、ぐらいしか出番がなかった。
ともかく、それと同じ要領で「最大Idを取得」と打ってはみたものの、
table作るのと違って、ぱっと結果が見えない。
しかも、どうも、うまくいってなさそう・・・。
おや、これは・・・
そうこうしているうちに、ふと気がついた。
さっき、23はもうあります、といっていたのに、27はもうあります、に変わっている。
なので、直ってないとわかっていながら、同じことを繰り返したら
28はもうあります、になったではないか。
ということはですよ。
こういう強引な手でいいんだろうか
そうです、つまり、あと2回失敗すれば、30に追いつくはずです。
そしてもう一回やれば
はい、ぶじINSERTできましたよ〜。
教訓 データを手動で登録するとき、Idを指定してはいけない
MySQLはでは起きなかったErrorです。
MySQLはテーブルに何件データが入っているかを見ているのに対して、
PostgreSQLは、「自分が」何件入力したか、を見ているらしいんですよね。
勝手に入れたヤツのことは知らん、という、頑固な職人です。
PostgreSQLは「自分の仕事に責任を持っている」ということにしておきましょう。
Discussion