要在 PostgreSQL 中插入批量数据/填充数据库,最快的方法是使用 COPY。来源
我必须填充一个数据库。现在,我的写入速度低至每秒 100-200 次。这涉及通过 C++ 库libpqxx发送许多单独的 INSERTS 。我认为的两个原因是:
- 数据有很多重复记录。(我有原始日志,我对其进行解析和发送。)这会导致主键异常。
- 插入语句的一一发送。
第一个不在我手中。但是我正在阅读第二个。
据我所知,tablewriter 类适合这个目的。然而,它显然已被弃用。我已经读过可以使用 stdin 作为参数进行复制。
但在这些线索之后,我迷路了。有人可以引导我找到解决方案吗?
编辑:这是代码,我有一个执行statemnt的函数:
void pushLog(Log log,pqxx::connection *conn){
pqxx::work w(*conn);
std::stringstream stmt;
stmt<<"INSERT INTO logs VALUES('"<<log.getDevice()<<"','"<<log.getUser()<<"','"<<log.getDate()<<"','"<<log.getLabel()<<"');";
try{
pqxx::result res = w.exec(stmt.str());
w.commit();
}
catch(const std::exception &e){
std::cerr << e.what() << std::endl;
std::cout<<"Exception on statement:["<<stmt.str()<<"]\n";
return;
}
}
我较早地建立了连接,并传递了对它的引用。
PS:这个问题可能缺少一些细节。如果是这样,请发表评论,我将编辑并添加它们。