我在尝试使用Heroku的Postgres数据存储时遇到了问题,它是从我本地的Postgres数据库还原而来的。使用还原的Postgres数据库,Django能够正常运行。它检索所有对象并使用它们的字段、主键等,没有任何问题。
但当涉及写入数据库时,无论是什么模型,我都会得到相同的错误。
psycopg2.IntegrityError: null value in column "id" violates not-null constraint
当我重置Heroku数据库并从空白状态创建对象时,就没有问题了。但如果我尝试在还原的数据库上创建任何对象,我总是会得到这个 null value in column "id" violates not-null constraint
错误。
这里是从尝试在Django Admin中创建基本模型的堆栈跟踪的复制/粘贴版本。我选择了这个模型示例,因为没有与创建它相关的其他代码。没有信号或任何东西。
Django版本:2.0 Python版本:3.6.3
Traceback:
发生了完整性错误,导致无法向数据库添加某些数据,详细信息显示缺少“id”列的值。这个错误可能是由于在执行SQL语句时传入了空值而引起的。从堆栈跟踪中可以看出,这个错误发生在每个模型上,而不仅仅是这个[非常基本的]模型。
class RaceClass(models.Model): title = models.CharField(max_length=140) slug = models.SlugField(unique=True) def __str__(self): return self.title class Meta: ordering = ['title']
以下是我如何将本地数据恢复到heroku上:
我使用以下命令将我的本地Postgres数据库(版本10.0)导出:
PGPASSWORD=mypassword pg_dump -Fc --no-acl --no-owner -h localhost -U myuser mydb > mydb.dump
然后使用命令将其上传到AWS,并将其还原到Heroku上的Postgres数据存储库(版本9.6.5):
heroku pg:backups:restore 'https://s3.amazonaws.com/me/items/3H0q/mydb.dump' DATABASE_URL
这些内容直接来自Heroku文档:https://devcenter.heroku.com/articles/heroku-postgres-import-export
顺便提一下,我在本地使用的是Postgres 10.0版本,而Heroku Datastore则是9.6.5。