2016-07-23 8 views
0

Ich versuche einige große Masseneinfügungen zu Postgres über Node-Postgres Wenn das Bindings-Array 65536 Werte überschreitet, dann geht nach Postgres der Rest der Werte und wenn die Abfrage ausgeführt wird, nehme ich der FehlerPostgreSQL node.js vorbereitete Anweisungen maximale Bindungen

[error: bind message supplies 4 parameters, but prepared statement "" requires 65540] 

Irgendwelche Gedanken? Vielen Dank im Voraus.

Antwort

1

Vorbereitete Anweisungen innerhalb von node-postgres sind nicht für Masseneinfügungen geeignet, da sie keine Abfragen mit mehreren Abfragen unterstützen. Und Sie sollten das Array der Variablen nicht über alle Inserts gleichzeitig strecken, das wird nicht gut skalieren, es hat seine eigenen Grenzen, wie die, die Sie dort getroffen haben.

Stattdessen sollten Sie Mehrwert-Einsätze, im Format verwenden:

INSERT INTO table(col1, col2, col3) VALUES 
(val-1-1, val-1-2, val-1-3), 
(val-2-1, val-2-2, val-2-3), 
...etc 

teilen Sie Ihre Bulk-Einsätze in Anfragen wie diese, mit bis zu 1.000 - 10.000 Datensätze, auf die Größe jedes Datensatzes in Abhängigkeit und als einfache Abfrage ausführen.

Siehe auch Performance Boost Artikel, zu verstehen INSERT Skalierbarkeit besser.