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

升级PostgreSQL 11至16后Django触发ProgrammingError报错求助

问题分析

从报错堆栈可明确:Django初始化阶段(数据库表尚未创建),代码就执行了模块级别的数据库查询,具体是main/utils/specific_instance.py中直接运行了:

comp = Customers.objects.get(pk='8aefa7c0-e72e-4b78-83d8-34cdb3e3ab98')

此时account_lib_customers表还未通过迁移创建,因此抛出"relation不存在"的错误。开头的RuntimeWarning也明确提示:Accessing the database during app initialization is discouraged,这正是问题根源。

解决方案

1. 修复模块级查询

将模块导入时自动执行的数据库查询改为延迟加载,比如:

  • 封装到函数内部,仅在实际需要时调用
  • 若需全局实例,使用懒加载逻辑或Django信号延迟执行

示例修改:

# main/utils/specific_instance.py
def get_default_customer():
    return Customers.objects.get(pk='8aefa7c0-e72e-4b78-83d8-34cdb3e3ab98')

# 原代码中调用comp的位置,替换为调用该函数
# comp = get_default_customer()

2. 重新初始化数据库流程

修复代码后,按以下步骤执行:

  • 确保PostgreSQL 16容器正常启动
  • 执行python manage.py makemigrations生成所有应用(含account_lib)的迁移文件
  • 执行python manage.py migrate创建全部数据库表
  • 启动runserver
关于account_lib的操作说明

需要针对account_lib做对应处理:

  • 若account_lib是Django应用(包含models和migrations),需确保它在INSTALLED_APPS配置中,执行迁移命令时会自动创建其对应的表结构
  • 若account_lib是纯数据库库(无Django模型),需手动在PostgreSQL中创建account_lib_customers表结构,或导入该库的初始化SQL脚本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 11:19:50