我有一个txt文件中的数据,像这样:-
A1085|CR01B| |13261F001000|0000000728| |0000000000000| |99000|01|
这个文本文件包含超过500 k行,我想用nodejs读取并插入到PostgreSQL表中。这些空格也应该像这个空格一样读取和保存。
我写了这样的脚本,它是工作的,数据也被插入到表中,但它是非常多的时间,如10分钟的2万行只。
const readTextFile = async () => {
const File = await fs.readFileSync('data.txt', 'utf-8');
let arr = File.split("|");
let modified = [];
let temp = [];
for (let i = 0; i < arr.length; i++) {
if (i % 10 === 0) {
modified.push([...temp]);
temp = [];
temp.push(arr[i].replace('\x00\r\n', ''));
} else {
temp.push(arr[i]);
}
}
console.log("modified", modified.length);
for (let i = 0; i < modified.length; i++) {
await insertValuesToDB(modified[i]);
}
}
const insertValuesToDB = async (values) => {
try {
const text = `INSERT INTO requirement(container, module, mod_devdate, part_no, qty, tapdate, tap_qty, taptime, sup_cd, namc_id) VALUES($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)`;
const result = await client.query(text, values);
console.log("result", result);
} catch (e) {
console.log("ERROR", e);
}
}
2条答案
按热度按时间4ktjp1zp1#
如果可能的话,我认为简单的
\copy
是最快的解决方案。例如:How to import CSV file data into a PostgreSQL table
也许这是不可能的,因为必须进行数据清理。
另一种可能性是在事务中 Package 插入操作。也许这可以"批处理",以降低内存消耗。
最小示例:
参见:https://node-postgres.com/features/transactions
uurv41yg2#
我认为不建议在这个函数中向数据库插入数据时循环这个过程,我建议在一个查询中完成所有操作,当我在mysql中遇到这种问题时,我是这样解决的:
这就是查询最后的样子。