0

データベースを MySql から PostgreSQL に移行しましたが、多くのテーブルが更新されていないことに気付いたので、グーグルで次のようにするように言われました。

ALTER SEQUENCE my_table_id_seq OWNED BY my_table.id;

そして物事はうまくいき始めました。すべてのテーブルでこれを行う必要がありました。

post_save次に、django.contrib.auth.model.User を作成し、後でフックを使用して UserProfile を作成しようとするとIntegrityErroruser_id外部キーが null として送信されるため、エラーが発生することに気付きました。

PostgreSQL に送信されるqueryand (Pythonの場合) は次のとおりです。args

INSERT INTO "auth_user" ("username", "first_name", "last_name", "email", "password", "is_staff", "is_active", "is_superuser", "last_login", "date_joined") VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s) (u'apitest04', '', '', u'a@a.aa', 'sha1$9f796$69c88c635c8a53a91544765d7996747cf326cfec', False, True, False, u'2013-01-05 12:39:07.384198', u'2013-01-05 12:39:07.384198')

INSERT INTO "myapp_userprofile" ("user_id", "website", "job", "hobbies", "timezone", "about", "company_name", "company_description", "company_website", "retailer_country", "avatar", "default_license", "default_watermark_text", "default_watermark", "default_watermark_position", "default_watermark_opacity", "language") VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) (None, None, None, None, None, None, None, None, None, None, None, 0, None, False, 0, 10, None)

auth_userトランザクションが閉じられる前にシーケンス IDが進められていないことが原因だと思います。Userの作成が失敗すると の作成がロールバックされるUserProfileため、それらは同じトランザクション中に発生しているに違いないと思います。

idトランザクションがまだ終了していないため、のUserが何らかの形でまだ返されていない可能性はありますか? そして、どのように私が問題を解決することを提案しますか?

4

1 に答える 1

1

問題は解決され、auth_user.idシーケンスに所有者がいないために発生していました。これで修正されました:

ALTER SEQUENCE auth_auth_id_seq OWNED BY auth_auth.id;
于 2013-01-05T20:41:35.967 に答える