2016-08-09 2 views
0

SQL Server 클라이언트를 대체해야하는 PostgreSQL 데이터베이스 클라이언트를 만들고 있습니다. 두 클라이언트 모두 C++로 작성됩니다. 지원되는 작업 중 하나는 std::string ReadChunk() 메서드를 포함하는 클래스의 지정된 인스턴스에서 대량 복사입니다.Postgres COPY FROM 데이터 형식을 삽입하기 전에

는 지금 내가 libpq를 기능을 사용

PQexec(connection, "COPY tablename FROM STDIN"); 
while(reader.HasNext()) { 
    PQputCopyData(connection, reader.ReadChunk().c_str()); 
} 
PQputCopyEnd(connection); 

을하지만 또한 너무 오래 된 varchar을 절단하고이 널 열을 대표하는 NULL 경우 \t 연속 두 사이에 삽입 할 수 있어야한다고 밝혀졌습니다. 데이터베이스 측에서이 변환을 수행하고 C 트리거 또는 유사한 것을 작성하는 방법이 있습니까? 아니면 SQL 서버 bcp_bind과 같은 클라이언트 측에서 인수 구문 분석을 구현해야합니까?

답변

0

내 구현은 데이터베이스 클라이언트에서 기본 데이터 처리를 푸시했습니다. 데이터 소스는 데이터베이스에 독립적이었고 한 번만 데이터를 읽었 기 때문에 좋은 해결책 인 것 같았습니다. 잘라내 기와 NULL 삽입 만 필요했습니다.

그래서 최종 솔루션은 모든 데이터베이스에 대한 구현과 테이블 표현과 추상적 인 RowSender에 다음 행을 읽는 방법 bool HasNext()NextRow(CRow&)와 클래스 RowReader 구성되어있다.

관련 문제