2017-02-02 3 views
0

Ich möchte so schnell wie möglich viele Parameter in die Postgres-Tabelle einfügen.libpqxx: Wie man ein Array von Parametern bindet

Jetzt verschwende ich zu viel Zeit für die Bindung Parameter nacheinander. Code sieht fast wie folgt aus:

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(); 

Wie ich sehe, commit 10 000 Elemente nehmen 0.001 s oder sogar weniger, aber die Bindung dauert etwa 10 Sekunden.

Ich möchte alle Parameter als ein Array von Werten binden. Wie macht man das mit pqxx? Oder gibt es einen besseren Ansatz zur Minimierung der Zeit?

+0

[Funktionen für den COPY-Befehl zugeordnet] (https://www.postgresql.org/docs/current/static/libpq-copy.html) – Abelisto

Antwort

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

Vielen Dank für diese Code-Schnipsel, die eine begrenzte bieten könnte , sofortige Hilfe. Eine [richtige Erklärung] (https://meta.stackexchange.com/q/114762) würde ihren langfristigen Wert erheblich verbessern, indem sie zeigt, warum dies eine gute Lösung für das Problem ist und es für zukünftige Leser mit anderen nützlicher machen würde , ähnliche Fragen. Bitte [bearbeiten] (https://meta.stackoverflow.com/posts/360251/edit) Ihre Antwort, um einige Erklärungen hinzuzufügen, einschließlich der Annahmen, die Sie getroffen haben. [ref] (https://meta.stackoverflow.com/a/360251/8371915) – user8371915

Verwandte Themen