我有一個使用NodeJS和PostgreSQL的奇怪錯誤,我希望你能幫助我。nodeJS將數據插入到PostgreSQL中的錯誤
我有大量的數據集,大約2百萬條我想插入到我的數據庫中。
一個數據由4列:
id: string,
points: float[][]
mid: float[]
occurences: json[]
我插入數據像這樣:
let pgp = require('pg-promise')(options);
let connectionString = 'postgres://archiv:[email protected]:5432/fotoarchivDB';
let db = pgp(connectionString);
cityNet.forEach((arr) => {
db
.none(
"INSERT INTO currentcitynet(id,points,mid,occurences) VALUES $1",
Inserts("${id},${points}::double precision[],${mid}::double precision[],${occurences}::json[]",arr))
.then(data => {
//success
})
.catch(error => {
console.log(error);
//error
});
})
function Inserts(template, data) {
if (!(this instanceof Inserts)) {
return new Inserts(template, data);
}
this._rawDBType = true;
this.formatDBType = function() {
return data.map(d => "(" + pgp.as.format(template, d) + ")").join(",");
};
這工作了整整第一個309248個的數據塊,然後突然它只是出現了錯誤(看起來好像)下面的數據試圖插入:
{ error: syntax error at end of input
at Connection.parseE (/home/christian/Masterarbeit_reworked/projekt/server/node_modules/pg-promise/node_modules/pg/lib/connection.js:539:11)
at Connection.parseMessage (/home/christian/Masterarbeit_reworked/projekt/server/node_modules/pg-promise/node_modules/pg/lib/connection.js:366:17)
at Socket.<anonymous> (/home/christian/Masterarbeit_reworked/projekt/server/node_modules/pg-promise/node_modules/pg/lib/connection.js:105:22)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:176:18)
at Socket.Readable.push (_stream_readable.js:134:10)
at TCP.onread (net.js:548:20)
name: 'error',
length: 88,
severity: 'ERROR',
code: '42601',
detail: undefined,
hint: undefined,
position: '326824',
internalPosition: undefined,
internalQuery: undefined,
where: undefined,
schema: undefined,
table: undefined,
column: undefined,
dataType: undefined,
constraint: undefined,
file: 'scan.l',
line: '1074',
routine: 'scanner_yyerror' }
每個迭代錯誤消息的'位置'條目都會更改。
我可以重做,它會在309248條目後總是出錯。 當我嘗試插入較少,如1000條目時,不會發生錯誤。
這真讓我困惑。我認爲PostgreSQL沒有任何最大數量的行。此外,錯誤信息根本無法幫助我。
解決 被發現的錯誤。在我的數據中有「空」條目滑入它。過濾掉空數據。 由於目前的方法有效,我會嘗試插入數據的其他建議,但性能非常糟糕。
您是否正在嘗試一次插入兩億條記錄? Node.js將無法處理該問題。插頁必須正確分頁。另外,不要使用這種舊的方法來生成插入,請使用如下所示的插入:https:// stackoverflow。com/questions/37300997/multi-row-insert-with-pg-promise –