2013-01-05 63 views
0

我將數據庫從MySql遷移到PostgreSQL,並且由於我注意到許多表沒有更新,因此有些使用Google的用戶會告訴我做這樣的事情:Django:在從MySQL遷移到PostgreSQL後UserProfile的user_id字段出現問題

ALTER SEQUENCE my_table_id_seq OWNED BY my_table.id; 

和東西開始工作。我必須爲我所有的桌子做這個。

然後我意識到有post_save鉤創建django.contrib.auth.model.User,並試圖建立一個用戶配置之後後,我因爲user_id外鍵爲空將發送得到IntegrityError

下面是被髮送到PostgreSQL的queryargs(在Python):

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'[email protected]', '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失敗時回滾,所以它們必須在同一事務中發生。

Userid有可能還沒有返回,因爲事務尚未結束?你如何解決這個問題?

回答

1

問題已解決,並且發生這種情況是因爲auth_user.id序列沒有所有者。這固定它:

ALTER SEQUENCE auth_auth_id_seq OWNED BY auth_auth.id;