我试图从Greku的数据库恢复到Greku的数据库.使用恢复的postgres数据库Django正常运行.它检索所有对象并使用它们的字段、主键等,没有任何问题.

但是,当涉及到写入数据库时,无论模型如何,我都会遇到同样的错误.

psycopg2.IntegrityError:"id"列中的null值违反了not null约束

当我重置heroku数据库并从空白板创建对象时,没有问题.但如果我试图在恢复的数据库上创建任何对象,我总是得到null value in column "id" violates not-null constraint


下面是试图在Django Admin中创建基本模型的复制/粘贴堆栈跟踪.我 Select 这个模型示例是因为没有与创建它相关的额外代码.没有信号什么的.

Django版本:2.0 Python版本:3.6.3

回溯:

文件

上述异常(列"id"中的null值与not null冲突)

文件

文件

文件

文件

文件

文件

文件

文件

文件

文件

文件

文件

文件

文件

文件

文件

文件

文件

文件

文件

文件

文件

文件

文件

文件

文件

文件

异常类型:IntegrityError at/admin/fantasy/raceclass/add/


The model from stack trace (keep in mind this error happens to every model, not just this [very basic] one.)

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']

以下是我如何将(d)本地数据恢复到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


旁注:我在本地使用10.0版Postgres,Heroku数据存储是9.6.5

推荐答案

我很确定这是因为你从Postgres 10导出,然后导入到9.它并没有完全失败,但一些模式定义(在本例中是自动递增的ID字段)没有正确导入.

我可以想出两个 Select :

  1. try 转储原始SQL而不是自定义格式:

    PGPASSWORD=mypassword pg_dump --no-acl --no-owner -h localhost -U myuser mydb > mydb.sql
    

    你不能用pg_restore来加载它,相反,你必须用psql手动运行查询.像这样的方法应该有用:

    heroku pg:psql < mydb.sql
    

    这里需要注意的是,首先需要清空现有数据库.

  2. 如果这也失败了,那么你需要从你想要导入的Postgres的主版本中导出.

Postgresql相关问答推荐

"错误:无法创建用户:错误:关系\users\违反了非空约束

包含JSONB属性的过滤器的索引策略

PostgreSQL(container)中使用80K子分区表处理共享内存不足错误

使用正则表达式计算 SQL 查询中 WHERE 过滤器的数量

postgres 中的模式前缀,被调用元素的范围

有没有办法使用postgresql将具有不同ID的同一行多次添加到表中?

sql:转换参数 $1 类型:不支持的类型 []int,in 的一部分

在 Ubuntu 11.04 服务器中启用对 postgresql 的 PHP 支持

INSERT RETURNING 是否保证以 right的顺序返回?

brew 程序更新恼人的错误信息

在 Windows 10 中执行时,Docker 容器关闭并给出data directory has wrong ownership错误

与 Oracle 的 CONNECT BY ... START WITH 等效的 PostgreSQL 语法是什么?

如何在 postgres 模式中列出关系

Django 1.9.2 AssertionError:database connection isn't set to UTC

如何使用 Django Migrations 重新创建已删除的表?

docker postgres 无法从指定端口启动

SQLAlchemy 声明式:定义触发器和索引 (Postgres 9)

postgres regexp_replace 只想允许 a-z 和 A-Z

PostgreSQL - 作为表名的动态值

Postgresql滚动删除旧行?