You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法创建Heroku PostgreSQL表,执行建表语句后查询提示relation不存在

你遇到的relation "files" does not exist错误,核心原因是事务未提交:
psycopg2 默认关闭自动提交,所有数据库写操作(包括建表这类DDL语句)执行后,都需要主动调用连接的commit()方法才会真正生效。你当前的代码执行完建表语句后直接关闭了连接,未提交的事务会被自动回滚,等于建表操作根本没有生效。


解决方案

  • 方案1:修改建表代码新增提交逻辑
    修改后的代码如下:
import psycopg2.extras
import psycopg2
from os import environ

URL = environ["DATABASE_URL"]

conn = psycopg2.connect(URL)

cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)

cur.execute(
    "CREATE TABLE files (id SERIAL PRIMARY KEY, FileName VARCHAR(255) UNIQUE NOT NULL, Content TEXT );")

# 新增事务提交语句
conn.commit()

conn.close()

print("TABLE CREATED")

重新执行修改后的代码即可完成建表。

  • 方案2:开启自动提交(适合一次性操作场景)
    如果不想每次执行写操作都手动提交,可以在创建连接时开启自动提交属性:
conn = psycopg2.connect(URL)
conn.autocommit = True

后续所有执行的SQL语句都会自动提交,不需要额外调用commit()。


验证建表结果

你可以直接在本地终端执行heroku pg:psql进入数据库命令行,输入\dt命令查看所有表,确认files表存在即可。


关于Procfile的补充说明

你当前遇到的表不存在问题和Procfile没有关联:
Procfile是用来定义Heroku应用启动时需要运行的进程命令的配置文件,只有你需要部署长期运行的服务(比如Web接口、定时任务等)时才需要配置。如果只是执行一次性的建表脚本,不需要配置Procfile。
如果你后续需要部署Python Web应用,只需要在项目根目录新建名为Procfile的文件,写入对应启动命令即可,比如Flask应用的配置为:web: gunicorn 你的启动文件名:app实例名。

内容的提问来源于stack exchange,提问作者hemant kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 15:15:03