postgresql - Heroku烧瓶UndefinedTable关系不存在
问题描述
应用程序在本地运行良好,但我在 Heroku 上部署应用程序时遇到问题,出现内部服务器错误。当我运行 heroku logs --tail 我得到这个:
2020-04-24T22:39:36.957365+00:00 app[web.1]: sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedTable) relation "farm" does not exist
2020-04-24T22:39:36.957366+00:00 app[web.1]: LINE 2: FROM farm ORDER BY farm.name
2020-04-24T22:39:36.957366+00:00 app[web.1]: ^
2020-04-24T22:39:36.957366+00:00 app[web.1]:
2020-04-24T22:39:36.957367+00:00 app[web.1]: [SQL: SELECT farm.id AS farm_id, farm.name AS farm_name, farm.address AS farm_address, farm.city AS farm_city
2020-04-24T22:39:36.957367+00:00 app[web.1]: FROM farm ORDER BY farm.name]
2020-04-24T22:39:36.957367+00:00 app[web.1]: (Background on this error at: http://sqlalche.me/e/f405)
2020-04-24T22:39:36.957668+00:00 app[web.1]: 10.95.177.213 - - [24/Apr/2020:22:39:36 +0000] "GET /farms HTTP/1.1" 500 0 "-" "
-"
另外,我得到了这个状态,不确定它是否有帮助。
$ heroku pg:info
=== DATABASE_URL
Plan: Hobby-dev
Status: Available
Connections: 2/20
PG Version: 12.2
Created: 2020-04-24 22:23 UTC
Data Size: 7.9 MB
Tables: 0
Rows: 0/10000 (In compliance)
Fork/Follow: Unsupported
Rollback: Unsupported
Continuous Protection: Off
Add-on: postgresql-encircled-56224
并进行heroku诊断:
$ heroku pg:diagnose
Report 7834cb14-1b08-4532-b611-4b457e00410e for fsdn-farm-shop::DATABASE_URL
available for one month after creation on 2020-04-25T10:06:21.528717+00:00
RED: Idle in Transaction
Pid Duration Query
───── ─────────────── ────────────────────────────────────────────────────────────────────────────────────────────────────────
18615 00:20:55.869121 SELECT farm.id AS farm_id, farm.name AS farm_name, farm.address AS farm_address, farm.city AS farm_city
FROM farm ORDER BY farm.name
GREEN: Connection Count
GREEN: Long Queries
GREEN: Long Transactions
GREEN: Indexes
GREEN: Bloat
GREEN: Hit Rate
GREEN: Blocking Queries
GREEN: Table Transaction ID Wraparound
GREEN: Schema Count
SKIPPED: Sequences
Error could not do check
SKIPPED: Database Transaction ID Wraparound
Error Database wraparound check not supported on this plan
SKIPPED: Load
Error Load check not supported on this plan
模型是这样设置的:
class Farm(db.Model):
__tablename__ = 'farm'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(120))
address = db.Column(db.String(120))
city = db.Column(db.String(32))
product = db.relationship('Product', backref='farm', lazy=True)
class Product(db.Model):
__tablename__ = 'product'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(120))
quantity = db.Column(db.Integer)
farm_id = db.Column(db.Integer, db.ForeignKey('farm.id'))
看起来迁移已运行,但我在想数据库 url 可能有问题,或者可能存在循环导入。我是新手,似乎无法弄清楚这一点。
还包括我的 github: https ://github.com/victorcocuz/fsdn-farm-shop
解决方案
错误消息relation "farm" does not exist
是由 postgresql 引发的,而不是 sqlalchemy 或 psycopg2(数据库驱动程序 sqlalchemy 使用)。该错误告诉我们数据库正在获取的查询是:
SELECT
farm.id AS farm_id,
farm.name AS farm_name,
farm.address AS farm_address,
farm.city AS farm_city
FROM
farm
ORDER BY
farm.name;
但它无法识别farm
其搜索架构中的表名。
注意这个问题中的相同错误:Postgresql tables exists, but getting "relation doesn't exist" when querying
如果您的架构不是公共架构,我会尝试通过添加以下内容在您的 ORM 中指定架构:__table_args__ = {"schema":"schema_name"}
在__tablename__ = 'farm'
.
或者你可以试试__tablename__ = '{schema_name}.farm'
。
推荐阅读
- regex - 从文件中搜索和替换多行
- java - Flutter中移动应用主屏幕的小部件
- django - 如何在 django 上检索使用 google 登录的用户的照片个人资料 url
- flutter - 如何在 dart 的 GET-request 中使用 queryParamets 将参数放入 url?
- blockchain - 无法从另一台机器连接到 Geth 节点 RPC
- azure - 向 Azure 逻辑应用中的变量中的对象添加属性
- image - WORKDIR 是否创建目录?
- c# - C#调用重载方法参数问题
- android - 使用窗口管理器编写 UI(重构)不起作用
- typescript - 为 Express 中间件函数创建 Jest 单元测试