我正在尝试执行一个大的选择查询(从200 000 000行,15列中大约50 000 000)并使用psycopg2将所有这些数据提取到pandas数据帧。在pgadmin服务器状态工具中,我可以看到,我的查询处于活动状态大约半小时,然后变为空闲状态。我读它意味着服务器正在等待新命令。另一方面,我的python脚本仍然没有数据,它也在等待它们(没有错误,看起来数据正在下载)。
总结一下,数据库正在等待,python正在等待,我还在等吗?幸福的结局有机会吗?或者python无法处理大量的od数据?
圣烟,蝙蝠侠!如果您的查询执行时间超过几分钟,您应该考虑采用不同的方式处理数据!如果要返回200个000行的15个单字节列,这已经是3千兆字节的原始数据,假设不是单个字节的开销,这是不太可能的。如果这些列是64位整数,那已经是24千兆字节。这是为Python处理的大量内存数据。
您是否考虑过如果您的进程在执行期间失败或连接中断时会发生什么?如果您的流程可以处理,您的程序将受益于以块的形式处理数据行。如果确实不可能,请考虑对数据库本身进行操作的方法,例如使用PL / pgSQL。