Postgres COPY TO STDOUT流写入CSV时无限挂起问题排查
PostgreSQL COPY流写入本地CSV时的挂起与数据截断问题
我通过node-pg和pg-copy-stream实现了数据导出流程:利用PostgreSQL的COPY命令将数据输出到STDOUT,转为可读流后通过pipeline写入本地CSV文件,脚本由Bun执行。示例代码如下:
const saveCopyStreamToFile = async ( pgPool: pg.Pool, copyQuery: string, fileName: string ) => { console.log(fileName); const client = await pgPool.connect(); const readable = client.query(copyTo(copyQuery)); const writeable = createWriteStream(`${os.homedir()}/cms/${fileName}`, { highWaterMark: 64 * 1024 }); try { await pipeline(readable, writeable); } finally { client.release(); } };
问题现象
- 针对某张特定表,复制流会无限挂起:可读流能正常触发
data事件、接收数据块,但始终不触发close事件 - 生成的CSV文件存在数据随机截断情况,例如某单元格内容变为
XYZ utilizes a configuH djid - 切换为postgresjs包处理该表时导出正常,但postgresjs在处理另一张表时,会出现完全相同的挂起问题
- 查询
pg_stat_activity表,发现对应的PostgreSQL进程处于idle状态
预期结果
能够将PostgreSQL复制流完整、正常地写入本地CSV文件
内容的提问来源于stack exchange,提问作者Wiz
相关产品推荐
相关产品推荐

