Передача массива записей в Postgres в `node-postgres` без конкатенации строк?

У меня есть функция Postgres, которая принимает массив пользовательского составного типа. Я заставил его работать, сгенерировав огромный текстовый запрос SQL, но после 100 000 элементов массива он терпит неудачу. Это может быть Node или Postgres, я не уверен.

Я знаю, что в Npgsql, драйвере .NET Postgres, вы можете передавать массивы как параметры. Можно ли сделать это и в node-postgres?


person Jeff    schedule 03.09.2018    source источник


Ответы (1)


Насколько мне известно, Node.js ограничивает свои процессы чуть менее 2 ГБ памяти на каждый. В зависимости от размера ваших объектов вы можете столкнуться с этим потолком памяти с таким большим массивом.

Если вы вставляете много элементов одновременно, может быть более эффективно и надежно передавать ваши объекты в базу данных с помощью команды COPY, а не массово INSERT с большим массивом. Вот несколько полезных постов, описывающих основы этого подхода:

person Connor    schedule 29.11.2018
comment
Что я действительно ищу, так это возможность передавать собственные массивы в postgres без необходимости генерировать SQL. Это возможно в .NET, поэтому мне любопытно, почему этого нет в node-pg. - person Jeff; 29.11.2018
comment
Навскидку, я не знаю упрощенного способа передать массив в качестве параметра функции PL/pgSQL из Node.js без соответствия синтаксису, ожидаемому PostgreSQL. В npm могут быть пакеты, которые обрабатывают это за вас, но я не знаю, как они называются. Этот вопрос и ответы на него могут быть актуальны: stackoverflow.com/questions/13328016 Что касается того, почему его нет в node-postgres, возможно, это не так. достаточно распространенный вариант использования? Для массовых вставок pg-format принимает структуры Array и Object для создания предложения VALUES для вас, но это несовместимо с вашим подходом к функциям. - person Connor; 30.11.2018