PostGresql 插入数据的问题

Marcelxx 2017-04-25 02:38:51
客户端使用C++的方式连接PostGresql。

PGresult *res = NULL;
res = PQexec(m_pPGConn, strSql.c_str());
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
std::string strError = PQerrorMessage(m_pPGConn);
PQclear(res);
res = NULL;
}

采用的是PQexec执行的insert语句,插入语句类似如下,

INSERT INTO history_location(id,x,y,z,prision_code,time) values('68058FE3-CC2F-4db3-ADDD-32950870E741',64.600000,190.200000,0.000000,'DBC21927-71A0-4506-9571-F9FD2C701FF7',1493102074000)

测试了下,效率不是很高,1s中大概插入100条数据左右,服务器和客户端都在同一个局域网中。
想请问下,有没有其他方式提高插入数据的效率。
...全文
978 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
secoler 2017-07-05
  • 打赏
  • 举报
回复
把需要插入的insert语句都放到一个batch里面,当达到一定数量,比如说1000条,执行一次batch,这样的速度比较快。
Marcelxx 2017-04-27
  • 打赏
  • 举报
回复
引用 1 楼 selecthis 的回复:
使用COPY
COPY命令该怎么用啊,求教,有点急!!!!!!!!
李察德-泰森 2017-04-27
  • 打赏
  • 举报
回复
引用 3 楼 Marcelxx 的回复:
[quote=引用 1 楼 selecthis 的回复:] 使用COPY
COPY命令该怎么用啊,求教,有点急!!!!!!!![/quote] COPY tablename(field1,field2,field3) FROM '/home/filename.ext' DELIMITER |;
李察德-泰森 2017-04-26
  • 打赏
  • 举报
回复
使用COPY
Marcelxx 2017-04-26
  • 打赏
  • 举报
回复
引用 1 楼 selecthis 的回复:
使用COPY
我用C++插入数据,如下

	CAccessPostSql accessSql;
	bool bIsConnected = accessSql.ConnectDB("192.168.1.116",5432,"test","postgres","letu2016");

	unsigned nStart = GetTimeStamp_t();

	//insert into history_location(id, x, y, z, prision_code, time) values(? , ? , ? , ? , ? , ? )")
	char szSql[1024];
	for (int i = 0; i < 10000; ++i)
	{
		sprintf_s(szSql, "insert into history_location(id, x, y, z, prision_code, time) values('%s' , %d , %d , %d , '%s' ,%d )",
			CreateGuid().c_str(), 101, 22, 0, "DBC21927-71A0-4506-9571-F9FD2C701FF7", nStart * 1000);
		accessSql.ExecuseSql(szSql);
	}
	unsigned nEnd = GetTimeStamp_t();
	int nDiff = nEnd - nStart;
	accessSql.DisconnDB();
插入一万条数据,大概用了100秒,而他们那边使用Java用jdbc的方式,大概用了26秒,我就想知道我哪里出现了问题,导致慢那么多

952

社区成员

发帖
与我相关
我的任务
社区描述
PostgreSQL相关内容讨论
sql数据库数据库架构 技术论坛(原bbs)
社区管理员
  • PostgreSQL社区
  • yang_z_1
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧