COPY 젠 토토은포스트그레스사용된 네트워크 연결에서 읽거나 쓸 수 있는 옵션이 있습니다 으로libpq. 따라서 함수는 이 네트워크 연결에 직접 액세스하는 데 필요하므로 애플리케이션이 이 기능을 활용할 수 있습니다.
이 기능은 다음을 얻은 후에만 실행되어야 합니다.PGRES_젠 토토_OUT또는PGRES_젠 토토_IN결과 객체PQexec또는PQgetResult.
PQgetline읽기 줄 바꿈으로 끝나는 문자 줄(에 의해 전송됨) 백엔드 서버)를 길이 길이의 버퍼 문자열로 변환합니다.
int PQgetline(PGconn *conn,
              문자 *문자열,
              정수 길이)좋아요fgets(3), 이 루틴은 복사합니다.
최대 길이-1자까지 문자열로 변환할 수 있습니다. 그것은 같다얻음(3) 그러나 이는 다음을 변환한다는 점에서
개행 문자를 null 문자로 종료합니다.PQgetline반환EOFEOF에서 0
      전체 라인을 읽었으면, 버퍼가 가득 차면 1
      그러나 종료 개행 문자는 아직 읽혀지지 않았습니다.응용프로그램은 새로운 행은 두 문자 "\."로 구성됩니다. 백엔드 서버가 결과 전송을 완료했음을 나타냅니다. 복사 명령. 애플리케이션이 다음 라인을 수신할 수 있는 경우 길이가 1자를 초과하므로 주의가 필요합니다. 확실히 "\"를 인식합니다. 줄을 올바르게 입력하세요(그리고 그렇지 않습니다. 예를 들어, 긴 데이터 라인의 끝을 터미네이터 라인). 코드는src/bin/psql/젠 토토.c예제 루틴이 포함되어 있습니다. 복사 프로토콜을 올바르게 처리합니다.
PQgetlineAsync다음을 읽습니다. 줄 바꿈으로 끝나는 문자 줄(에 의해 전송됨) 백엔드 서버)를 차단하지 않고 버퍼에 넣습니다.
int PQgetlineAsync(PGconn *conn,
                   char *버퍼,
                   int bufsize)이 루틴은 다음과 유사합니다.PQgetline, 하지만 다음과 같은 애플리케이션에서 사용할 수 있습니다.
COPY 데이터를 비동기적으로, 즉 차단 없이 읽어야 합니다.
COPY 명령을 실행하고 다음을 얻었습니다.PGRES_젠 토토_OUT응답, 애플리케이션이 호출해야 함PQconsumeInput그리고PQgetlineAsync데이터 끝 신호까지
      감지됩니다. 달리PQgetline, 이거
      루틴은 데이터 끝을 감지하는 책임을 집니다. 켜기
      통화할 때마다,PQgetlineAsync할 것이다
      완전히 개행으로 끝나는 데이터 라인이 다음과 같은 경우 데이터를 반환합니다.
      libpq의 입력 버퍼에서 사용 가능하거나 들어오는 데이터가 있는 경우
      행이 너무 길어 호출자가 제공한 버퍼에 맞지 않습니다.
      그렇지 않으면 라인의 나머지 부분까지 데이터가 반환되지 않습니다.
      도착합니다.데이터 복사 끝 표시가 다음과 같은 경우 루틴은 -1을 반환합니다. 인식되었습니다. 데이터가 없으면 0, 양수입니다. 반환된 데이터의 바이트 수를 나타내는 숫자입니다. -1인 경우 반환되면 발신자는 다음 통화를 해야 합니다.PQend젠 토토, 그런 다음 정상으로 돌아갑니다. 처리. 반환된 데이터는 다음 이상으로 확장되지 않습니다. 개행 문자. 가능하다면 전체 라인이 반환됩니다. 한 번에. 그러나 호출자가 제공한 버퍼가 너무 백엔드에서 전송한 라인을 보관하기 위한 작은 크기, 그 다음에는 부분 데이터 라인이 반환됩니다. 이는 테스트를 통해 감지할 수 있습니다. 마지막으로 반환된 바이트가 "인지 여부\n" 아니면. 반환된 문자열은 다음과 같습니다. null로 종료됩니다. (종료 null을 추가하려면 실제로 방보다 하나 더 작은 크기를 전달해야 합니다. 가능합니다.)
PQputline다음을 보냅니다 백엔드 서버에 대한 null 종료 문자열입니다. 다음과 같은 경우 0을 반환합니다. 알았어,EOF을 보낼 수 없는 경우 문자열.
int PQputline(PGconn *conn,
              const char *string);애플리케이션은 명시적으로 두 문자를 보내야 합니다.
"\."를 마지막 줄에 추가하여
백엔드에서 데이터 전송이 완료되었음을 알립니다.PQputnbytes다음을 보냅니다 null로 끝나지 않는 문자열을 백엔드 서버에 보냅니다. 0을 반환합니다. 괜찮다면 문자열을 보낼 수 없으면 EOF입니다.
int PQputnbytes(PGconn *conn,
                const char *버퍼,
                int nbytes);이것은 정확히 같습니다PQputline,
단, 데이터 버퍼는 null로 종료될 필요가 없습니다.
보낼 바이트 수는 직접 지정됩니다.PQend젠 토토다음과 동기화됩니다. 백엔드. 이 함수는 백엔드가 완료될 때까지 기다립니다. 사본. 마지막 문자열이 다음과 같을 때 발행되어야 합니다. 다음을 사용하여 백엔드로 전송되었습니다.PQputline또는 마지막 문자열이 다음을 사용하여 백엔드에서 수신됨PGgetline. 발급되거나 백엔드에 있어야 합니다. 프런트엔드와 "동기화되지 않을" 수 있습니다. 에서 돌아올 때 이 함수를 사용하면 백엔드는 다음 메시지를 수신할 준비가 됩니다. 쿼리. 성공적으로 완료되면 반환 값은 0입니다. 그렇지 않으면 0이 아닙니다.
int PQend젠 토토(PGconn *conn);
예를 들면:
PQexec(conn, "테이블 foo 생성(a int4, b char(16), d 배정밀도)"); PQexec(conn, "표준 입력에서 foo 복사"); PQputline(conn, "3\thello world\t4.5\n"); PQputline(conn,"4\t안녕하세요 세상\t7.11\n"); ... PQputline(conn,"\\.\n"); PQend젠 토토(콘);
사용 시PQgetResult, 애플리케이션은 a에 응답해야 합니다.PGRES_젠 토토_OUT실행에 의한 결과PQgetline반복적으로, 이어서PQend젠 토토종료 줄이 표시된 후. 그것 그러면 다음으로 돌아가야 합니다.PQgetResult다음까지 반복PQgetResultNULL을 반환합니다. 마찬가지로PGRES_젠 토토_IN결과는 일련의 처리됨PQputline다음 호출PQend젠 토토그러면 으로 돌아갑니다.PQgetResult루프. 이 배열은 복사 또는 복사 명령을 보장합니다. 일련의에 포함됨SQL젠 토토 올바르게 실행됩니다.
이전 신청서는 사본을 제출하거나 복사할 가능성이 높습니다. 를 통해PQexec그리고 다음과 같이 가정합니다. 거래는 다음 이후에 완료됩니다.PQend젠 토토. 복사 입/출력이 유일한 경우에만 올바르게 작동합니다.SQL쿼리 문자열의 젠 토토입니다.