最近、Django プロジェクトの背後にあるデータベースの SQL ダンプを作成しました。SQL を少しクリーンアップした後、DB とすべてのデータを復元することができました。問題は、シーケンスがすべてめちゃくちゃだったことです。新しいユーザーを追加しようとしたところ、Python エラーが発生しましIntegrityError: duplicate key violates unique constraint
た。
当然のことながら、SQL ダンプがシーケンスを再開しなかったと考えました。しかし、それはしました:
DROP SEQUENCE "auth_user_id_seq" CASCADE;
CREATE SEQUENCE "auth_user_id_seq" INCREMENT 1 START 446 MAXVALUE 9223372036854775807 MINVALUE 1 CACHE 1;
ALTER TABLE "auth_user_id_seq" OWNER TO "db_user";
ユーザー(または既存のデータとそのようなシーケンスを持つテーブルの新しい行)の作成を繰り返し試行すると、オブジェクト/行の作成が成功することがわかりました。それは差し迫った問題を解決しました。
しかし、そのテーブルの最後のユーザー ID が 446 (上記のシーケンス作成の開始値と同じ) であることを考えると、Postgresql は単にそのキーを使用して行の作成を開始しようとしていたように見えます。
SQL ダンプは間違った開始キーを 1 ずつ提供していますか? または、指定された開始 ID の後にシーケンスを開始するために、他のコマンドを呼び出す必要がありますか? 好奇心旺盛。