Использование COPY в pqxx

Теперь, когда tablestreams являются осуждается, есть ли другой способ COPY большие объемы данных в базу данных с использованием pqxx?

В настоящее время я использую подготовленный оператор, но получаю только около 4 тыс. Вставок в секунду, что недостаточно, чтобы не отставать от данных, которые я получаю. Вот мой тестовый код:

  conn.prepare("test_prepared", "INSERT INTO test VALUES ($1, $2, $3, $4, $5, $6)")
("real")
("varchar", pqxx::prepare::treat_string)
("varchar", pqxx::prepare::treat_string)
("varchar", pqxx::prepare::treat_string)
("varchar", pqxx::prepare::treat_string)
("bytea")

// ...

for (int i=0; i < LOOPS; i++) {
pqxx::work txn2(conn);
for (int j=0; j < ROWS_PER_SECOND; j++) {
// ...
txn2.prepared("test_prepared")(ts)(field1)(field2)(field3)(field4)(conn.esc_raw(bin, 10000)).exec();
}
txn2.commit();
usleep(1000000);  // sleep for a second
}

С помощью Python API я могу получать 50 000+ вставок в секунду с COPY FROM,

  for i in range(ROWS_PER_SECOND):
vals.append('%f\t%s\t%s\t%s\t%s\t%s' % (time.time(), util.random_text(50),
util.random_text(50), util.random_text(50), util.random_text(50),
util.random_text(10000)))
f = StringIO('\n'.join(vals))
cur.copy_from(f, 'test', \
columns=('timestamp', 'field1', 'field2', 'field3', 'field4', 'bin'))
conn.commit()

Таким образом, postgres вполне способен справиться с этим вариантом использования. Что такое эквивалент pqxx?

4

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]