Максимальные привязки подготовленных операторов PostgreSQL node.js

Я пытаюсь сделать несколько больших массовых вставок в Postgres через node-postgres. Когда массив привязок превышает 65536 значений, затем передает в postgres остальные значения, и когда он выполняется, я принимаю ошибку

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

Какие-нибудь мысли? Заранее спасибо.


person Kon    schedule 23.07.2016    source источник


Ответы (1)


Подготовленные операторы в пределах node-postgres не подходят для массовой вставки, поскольку они не поддерживают операторы с несколькими запросами. И не стоит растягивать массив переменных по всем вставкам одновременно, это плохо масштабируется, у него есть свои ограничения, вроде того, что вы там нажали.

Вместо этого вы должны использовать многозначные вставки в формате:

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

разделяйте массовые вставки на такие запросы, как этот, до 1000–10 000 записей, в зависимости от размера каждой записи, и выполняйте как простой запрос.

См. также статью Повышение производительности, чтобы лучше понять INSERT масштабируемость.

person vitaly-t    schedule 23.07.2016