2017-02-02 6 views
0

Я бы хотел как можно быстрее вставить многие параметры в таблицу postgres.libpqxx: Как связать массив параметров

Теперь я трачу слишком много времени на привязку параметров по одному. Код выглядит почти так:

pqxx::connection my_connection(c_string); 
my_connection.prepare("insert_to_db", "INSERT INTO t (id, name) VALUES ($1, $2)); 

pqxx::work W(my_connection); 
for (int i = 0; i < 10000; i++) 
{ 
    W.prepared("insert_to_db")(i)("Max").exec(); 
} 
W.commit(); 

Как я могу видеть, commit 10 000 элементов принимают 0,001 сек или даже меньше, но связывание занимает около 10 секунд.

Я хотел бы привязать все параметры в виде массива значений. Как это сделать, используя pqxx? Или существует лучший подход к минимизации времени?

+0

[Функция, связанная с копией Command] (https://www.postgresql.org/docs/current/static/libpq-copy.html) – Abelisto

ответ

0
pqxx::connection c; 
pqxx::work w(c); 
c.prepare("prep", "select stored_proc($1::text[])"); 
auto r = w.prepared("prep")("{v1, v2}").exec(); 
+0

Спасибо за этот фрагмент кода, который может обеспечить некоторые ограниченные , немедленная помощь. [Правильное объяснение] (https://meta.stackexchange.com/q/114762) значительно улучшит его долгосрочную ценность, показывая, почему это является хорошим решением проблемы и сделает его более полезным для будущих читателей с другими , аналогичные вопросы. Пожалуйста, отредактируйте (https://meta.stackoverflow.com/posts/360251/edit) свой ответ, чтобы добавить какое-то объяснение, включая сделанные вами предположения. [Ссылка] (https://meta.stackoverflow.com/a/360251/8371915) – user8371915