【问题标题】:Django and Elasticbeanstalk: a column that has been deleted on local hasn't been deleted on RDSDjango 和 Elasticbeanstalk:在本地已删除的列尚未在 RDS 上删除
【发布时间】:2019-06-15 03:41:41
【问题描述】:

我将我的项目部署到 eb 并且表单提交在 eb 上不起作用,即使它在本地工作。我找到了原因。 不允许为 null 的模型属性之一仍然保留在 RDS 上,即使我过去删除了它。

日志错误是这样的

ERROR:  null value in column "a_variable" violates not-null constraint

我该如何处理这个问题?有没有办法在 RDS 上手动删除列?我使用PostgreSQL 作为数据库引擎。

【问题讨论】:

  • 您是否运行了所有迁移?应该删除列
  • 是的,我做到了..

标签: django amazon-web-services amazon-rds amazon-elastic-beanstalk


【解决方案1】:

您的 RDS 数据库只是一个普通的 PostgreSQL 数据库。如果确实需要直接访问,可以:

  • 创建一个安全组,将 PostgreSQL 端口(使用 TCP 的 5432)打开到您当前的 IP 地址。
  • 将安全组添加到您的 RDS 实例(暂时不要忘记稍后将其删除)
  • 在您的本地计算机上使用 psql 连接到您的 RDS 实例,并使用您的 django 凭据。
  • 运行普通的 SQL 命令 (ALTER TABLE table_name DROP COLUMN column_name;) 删除列。当心!您正在直接操作您的数据库。

为了确保我会检查 django-migrations 表以查看所有迁移是否正确运行。如果不是这种情况,您可能会在以后的迁移中遇到问题。

【讨论】:

  • 我仍然无法连接到数据库。添加安全组是什么意思?安全组已包含在实例中。
  • 我在这里发布了我的问题stackoverflow.com/questions/54311978/…你能看到吗?
  • 其实我想我知道这个错误的原因。我实际上删除了所有迁移文件并在过去在本地重新创建了数据库,在重新创建数据库之前,我删除了这个属性然后重新创建。所以我当前的迁移文件无法告诉 AWS 我删除了该列并且它仍然存在。您认为再次在本地重新创建数据库(包括已删除的属性)并删除该属性以便迁移文件可以记录它仍然安全吗?
  • 如果您已经在生产环境中应用了迁移文件,那么删除它们总是一个坏主意,因为那样您就不再有相同的起点了。在修改任何已经应用的迁移时,您需要非常小心并真正知道自己在做什么(manage.py migrate --fake 可以提供帮助)。如果您目前处于代码正常工作的情况,并且在您将代码更新到最新提交后,manage.py migrate 不会在生产中产生错误,我不会接触迁移。
  • 我做到了。我的网站是固定的。非常感谢。
猜你喜欢
  • 2014-11-10
  • 2018-01-23
  • 2022-07-22
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-06
  • 2017-12-18
相关资源
最近更新 更多