【问题标题】:'Relation does not exist' error after transferring to PostgreSQL转移到 PostgreSQL 后出现“关系不存在”错误
【发布时间】:2017-05-03 03:39:05
【问题描述】:

我已将我的项目从 MySQL 转移到 PostgreSQL 并尝试删除该列作为先前问题的结果,因为在我从 models.py 中删除有问题的列并保存之后。错误甚至没有消失。 Integer error transferring from MySQL to PostgreSQL

加引号和不加引号都试过了。

ALTER TABLE "UserProfile" DROP COLUMN how_many_new_notifications;

或者:

ALTER TABLE UserProfile DROP COLUMN how_many_new_notifications;

获取以下信息:

ERROR:  relation "UserProfile" does not exist

这是一个模型,如果有帮助:

 class UserProfile(models.Model):
    user = models.OneToOneField(User)
    how_many_new_notifications = models.IntegerField(null=True,default=0)
User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])

我认为这可能与大小写混合有关,但我没有通过所有类似问题找到解决方案。

【问题讨论】:

  • 不带双引号试试。
  • @Gordon Linoff 哦,是的,两者都试过了。这是我找到并尝试过的一种解决方案

标签: mysql django postgresql


【解决方案1】:

是的,Postgresql 是一个区分大小写的数据库,但 django 足够聪明,知道这一点。它转换所有字段,通常将模型名称转换为小写的表名称。然而,这里真正的问题是您的模型名称将以应用程序名称为前缀。一般django表名是这样的:

<appname>_<modelname>

您可以通过以下方式找出它的确切含义:

from myapp.models import UserProfile
print (UserProfile._meta.db_table)

显然这需要在 django shell 中输入,由./manage.py shell 调用,此打印语句的结果就是您应该在查询中使用的结果。

【讨论】:

  • 我不知道现在是什么。我的应用名为“博客”,所以我尝试了“blog_UserProfile”,但它“没有退出”
  • 你为什么不按照建议打印 UserProfile._meta.db_table ?
  • “错误:未实现跨数据库引用”另外我不太了解语法。首先很清楚,但这里的 _meta 是干什么用的?
  • 好吧,我在 shell 中得到的正是我尝试过的“blog_userprofile”
  • 现在听起来您的迁移尚未运行。看看你的新问题。
【解决方案2】:
  • 客户DataGrip
  • 数据库引擎:PostgreSQL

对我来说,这打开一个新控制台很有效,因为显然从 IDE 缓存中它无法识别我创建的表。

Steps 操作数据库的表:

  1. 数据库(IDE 的左侧面板)>
  2. 双击 PostgreSQL - @localhost >
  3. 双击数据库名称>
  4. 右键单击公共架构 >
  5. 新建 > 控制台

GL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多