2016-10-19 90 views
0

我只是將我的服務器遷移到一個歐洲地區heroku,restoredatabase backup新的服務器。不幸的是我得到以下error,同時儘量insert an new row表的一個Postgresql錯誤插入新行'PG :: NotNullViolation:錯誤:列中的空值「ID」違反非空約束'

INSERT INTO "users" ("created_at", "id", ...) VALUES ($1, $2, ...) [["created_at", Thu, 13 Oct 2016 23:53:17 CEST +02:00], ["id", nil], ...] 

ActiveRecord::StatementInvalid: PG::NotNullViolation: ERROR: null value in column "id" violates not-null constraint 

DETAIL: Failing row contains (null, ...) 

我的架構看起來像下面

create_table "users", :id => false, :force => true do |t| 
    t.integer "id",   :null => false 
    t.datetime "created_at", :null => false 
    ... 
end 

我怎樣才能解決這個問題呢?

回答

1

我已經嘗試了以下解決方案來解決這個問題,我寫下了那些需要它的人。

解決方案#1

將我的本地數據庫

rake db:drop 

運行遷移

rake db:migrate 

現在用--data-only選項

pg_restore --data-only --verbose --no-acl --no-owner -h localhost -U user_name -d database_name latest.dump 
導入生產數據庫

這部分解決了我的問題,但lose all my data在表中,所以this is not an suitable one

解決方案2(工作正常)

觀察錯誤後,我明白了一些東西像主鍵序列被打破,並與系統不應該嘗試插入空值的ID字段,不知怎麼我的model forgot the primary key。然後我通過模型及其working fine

class User < ActiveRecord::Base 
    self.primary_key = 'id' 
end 
相關問題