我只是将我的服务器迁移到heroku
上的eu区域,并restore
将旧database backup
迁移到新服务器。不幸的是,当我尝试error
到表格
insert an new row
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
我该如何解决这个问题?
答案 0 :(得分: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
。然后我set the primary key
通过模型及其working fine
。
class User < ActiveRecord::Base
self.primary_key = 'id'
end
答案 1 :(得分:0)
我遇到了一个奇怪的问题,但通过第一个解决方案的一个细微变化解决了该问题:
foreach ($xml->Article as $Article)
然后
rake db:drop
最后
rake db:migrate:reset
通过这种方式,它可以保持数据库结构,仅还原数据,但是,通过不检查外键约束,可以加载表,并且不会以一堆空表结尾...