我在node.js应用程序上使用node-postgres PG客户端从数据库查询数据,并将结果传递给express.js响应。这个很好用。然而,它需要一点时间来获得结果,并且宁愿创建一个cron作业来将结果保存在文件中。express API端点将把这个保存的文件作为响应传递。
使用fs.writeFile
或fs.createWriteStream
执行此操作会引发PG Client Error: error: could not write to file "base/pgsql_tmp/pgsql_tmp6554.0": No space left on device
代码复制
const { getData } = require("./pg_queries");
const fs = require("fs");
const cron = require("node-cron");
const pull_and_save = async () => {
fs.writeFile(
"data/results.json",
JSON.stringify(await getData()),
{ flag: "w+" },
(err) => {
if (err) console.log(err);
}
);
}
cron.schedule("* */10 * * * *", function () {
pull_and_save();
});
搜索一下这个问题,可能的解决方案是释放更多的磁盘空间
我的问题是为什么同样的Postgress查询可以用express
而不是fs.writeFile
或fs.createWriteStream
?
express端点示例的代码段:
const { getData } = require("./pg_queries");
const app = express();
app.get("/get-pg-data", async (req, res) => {
const data = await getData();
res.send(data);
});
1条答案
按热度按时间pgvzfuti1#
这个问题可以通过使用流将数据从PostgreSQL查询结果有效地复制到文件来解决。
试试这个代码;
它将数据从PostgreSQL查询结果复制到名为“data/results.json”的文件中,而cron作业则处理连接和错误。这种方法不需要使用过多的RAM。
希望它能起作用:)