提问人:giddy 提问时间:9/24/2023 最后编辑:giddy 更新时间:9/25/2023 访问量:79
PG 客户端错误:无法写入文件“base/pgsql_tmp/temp_file”
PG Client Error : could not write to file "base/pgsql_tmp/temp_file"
问:
我在 node.js 应用程序上使用 node-postgres PG 客户端从数据库中查询数据并将结果传递给 express.js 响应。这工作得很好。但是,获取结果需要一些时间,并且宁愿创建一个 cron-job 将结果保存在文件中。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 查询适用于 AND 而不是 OR ?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);
});
答:
0赞
Maimoona Abid
9/25/2023
#1
通过使用流式处理有效地将数据从 PostgreSQL 查询结果复制到文件,可以解决此问题。
试试这个代码;
const { getData } = require("./pg_queries");
const fs = require("fs");
const cron = require("node-cron");
const { Client } = require("pg");
const copyTo = require("pg-copy-streams").to;
const connectionString = "your-postgres-connection-string";
const client = new Client({ connectionString });
const pull_and_save = async () => {
const query = getData(); // Assuming getData returns a query stream
const stream = client.query(copyTo('COPY (' + query.text + ') TO STDOUT'));
const fileStream = fs.createWriteStream("data/results.json");
stream.pipe(fileStream);
stream.on("end", () => {
client.end();
console.log("Data has been saved to data/results.json");
});
stream.on("error", (err) => {
console.error("Error streaming data:", err);
client.end();
});
};
client.connect();
cron.schedule("* */10 * * * *", function () {
pull_and_save();
});
它将数据从 PostgreSQL 查询结果复制到名为“data/results.json”的文件中,而 cron 作业则处理连接和错误。此方法无需使用过多的 RAM。
希望它能:)
评论