안녕하세요
PostgreSQL라이브러리 사용하여 C프로그래밍 하고 있는데요
초당 몇개의 패킷이 들어오고 테이블에 인서트 문을 실행하면 PQexec() 문제가 없는데
초당 수백개의 패킷을 인서트 시킬려고 하면
PQexec() 이 함수에서 프로그램이 죽어버리는 현상이 있습니다...
char buf[200];
PGresult* result;
sprintf(buf, "INSERT INTO info values(now(), \'%s\', \'%s\')", \
account, ip);
result = this->doSQL(cnn, buf);
printf("%x \n", result);
if (PQresultStatus(result) != PGRES_COMMAND_OK)
{
puts("sql insert error");
}
PQclear(result);
위와 같이 했고요, 아래와 같이 실행을 합니다.
PGresult* DB::doSQL(PGconn* cnn, char* sql)
{
PGresult* result;
puts("1");
//this->m_mutex.Lock();
result = PQexec(cnn, sql); ////// 이 부분에서 죽습니다...
//this->m_mutex.Unlock();
puts("2");
return result;
}
가끔 가다가 계속 잘 실행이 되는 경우가 있는데 대부분의 경우 PQexec()에서 죽어버립니다.
혹시 아시는 분이 계실까요...;;;
|