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

使用PostgreSQL的DevPi无法上传大文件问题求助

解决DevPi+PostgreSQL上传大文件内存溢出问题

问题重现

上传约1350MB文件时触发PostgreSQL内存错误:

pg8000.exceptions.DatabaseError: {'S': 'ERROR', 'V': 'ERROR', 'C': '54000', 'M': 'out of memory', 'D': 'Cannot enlarge string buffer containing 0 bytes by 1391196735 more bytes.', 'W': 'COPY files, line 1, column data', 'F': 'stringinfo.c', 'L': '303', 'R': 'enlargeStringInfo'}

已尝试--max-request-body-size和调大max_wal_size无效,环境为Python脚本+twine上传、PostgreSQL 16.2、DevPi自动生成表结构。

解决方案

1. 切换DevPi存储模式到文件系统(推荐)

DevPi默认将文件内容存在PostgreSQL字段中,大文件会直接触发数据库内存溢出。改为文件系统存储可彻底规避该问题:

  • 停止当前DevPi服务
  • 重新启动时添加--storage fs参数并指定数据存储目录:
    devpi-server --storage fs --serverdir /your/devpi/storage/path
    
  • 若使用配置文件,在配置中添加:
    [server]
    storage = fs
    

2. 调整PostgreSQL内存参数(仅当必须使用数据库存储时)

错误源于PostgreSQL执行COPY操作时,无法分配足够内存加载大文件内容,需调整以下核心参数:

  • 编辑postgresql.conf配置文件:
    # 根据服务器内存调整,建议设为64MB~256MB
    work_mem = 64MB
    # 维护操作内存,可设为256MB~1GB
    maintenance_work_mem = 256MB
    # 共享缓冲区,建议设为物理内存的1/4
    shared_buffers = 4GB
    
  • 重启PostgreSQL服务使配置生效:
    # 以systemd管理为例
    sudo systemctl restart postgresql
    

3. 验证DevPi表结构(可选)

检查DevPi自动生成的files表,若data字段类型为bytea,大文件写入时会持续占用内存。若坚持用数据库存储,可考虑将文件拆分为多个小片段存储,但此方法需修改DevPi源码,不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 09:26:06