이 문서는 지원되지 않는 스포츠 토토 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 32.10. 토토 결과 토토 결과과 토토 결과 토토 결과버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

31.9. 와 스포츠 토토 함수복사명령

복사명령스포츠 토토읽거나 쓸 수 있는 옵션이 있습니다 다음에서 사용하는 네트워크 연결로libpq. 이 섹션에 설명된 기능 애플리케이션이 다음을 통해 이 기능을 활용할 수 있도록 합니다. 복사된 스포츠 토토를 공급하거나 소비합니다.

전체 프로세스는 애플리케이션이 먼저 SQL을 발행하는 것입니다.복사명령을 통해PQexec또는 이에 상응하는 함수 중 하나입니다. 는 이에 대한 응답(명령에 오류가 없는 경우)은 다음과 같습니다.PGresult상태 코드를 포함하는 객체 의PGRES_COPY_OUT또는PGRES_COPY_IN(지정된 사본에 따라 다름) 방향). 그런 다음 애플리케이션은 이 기능을 사용해야 합니다. 스포츠 토토 행을 수신하거나 전송하는 섹션입니다. 스포츠 토토 전송이 완료되면 완료, 또 다른PGresult객체는 전송의 성공 또는 실패를 나타내기 위해 반환됩니다. 상태 될 것이다PGRES_COMMAND_OK성공을 위해 또는PGRES_FATAL_ERROR어떤 문제가 있었다면 마주쳤다. 이 시점에서 다음을 통해 추가 SQL 명령을 실행할 수 있습니다.PQexec. (그것은 불가능하다 동일한 연결을 사용하여 다른 SQL 명령을 실행하는 동안복사작업이 진행 중입니다.)

만약에복사명령은 다음을 통해 발행됩니다.PQexec다음을 포함할 수 있는 문자열 추가 명령을 실행하려면 애플리케이션이 계속해서 결과를 가져와야 합니다. 를 통해PQgetResult완료 후복사시퀀스. 경우에만PQgetResult반환NULLis it certain that thePQexec명령 문자열이 완료되었으며 더 많은 명령을 실행해도 안전합니다.

이 섹션의 기능은 다음 후에만 실행되어야 합니다. 결과 상태를 얻는 중PGRES_COPY_OUT또는PGRES_COPY_INfromPQexec또는PQgetResult.

A PGresult다음 중 하나를 포함하는 개체 이러한 상태 값은 다음에 대한 추가 스포츠 토토를 전달합니다.복사작업을 시작하는 중입니다. 이 추가 스포츠 토토는 다음에서도 사용되는 기능을 사용하여 사용할 수 있습니다. 쿼리 결과와의 연결:

PQn필드

복사할 열(필드) 수를 반환합니다.

PQbinaryTuples

0은 전체 복사 형식이 텍스트임을 나타냅니다(행으로 구분됨). 개행, 구분 문자로 구분된 열 등). 1 전체 복사 형식이 이진임을 나타냅니다. 참조복사더 많은 정보를 원하시면.

PQfformat

관련된 형식 코드(텍스트의 경우 0, 바이너리의 경우 1)를 반환합니다. 복사 작업의 각 열과 함께. 열별 형식 코드 전체 복사 형식이 텍스트인 경우 항상 0이 되지만 이진 형식은 텍스트 열과 이진 열을 모두 지원할 수 있습니다. (그러나 현재 구현 기준으로복사, 이진 열만 이진 복사본에 나타납니다. 따라서 열별 형식은 항상 전체 형식과 일치합니다. 현재.)

참고:이러한 추가 스포츠 토토 값은 프로토콜 3.0을 사용할 때. 프로토콜 2.0을 사용하는 경우 이러한 모든 함수는 0을 반환합니다.

31.9.1. 전송 기능복사스포츠 토토

이 기능은 다음 중에 스포츠 토토를 보내는 데 사용됩니다.STDIN에서 복사. 호출되면 실패합니다. 연결이 되지 않습니다.COPY_IN상태.

PQputCopyData

동안 서버에 스포츠 토토를 보냅니다.COPY_IN상태.

int PQputCopyData(PGconn *conn,
                  const char *버퍼,
                  int nbytes);

다음을 전송합니다복사스포츠 토토 지정됨버퍼, 길이n바이트, 서버에. 스포츠 토토가 있으면 결과는 1입니다. 시도가 차단되므로 전송되지 않은 경우 0입니다. (이 경우는 연결이 비차단 상태인 경우에만 가능합니다. 모드) 또는 오류가 발생한 경우 -1입니다. (사용PQerrorMessage반환된 경우 세부정보를 검색합니다. 값은 -1입니다. 값이 0이면 쓰기 준비가 될 때까지 기다렸다가 시도하십시오. 다시.)

응용 프로그램은 다음을 나눌 수 있습니다.복사스포츠 토토는 편리한 크기의 버퍼 로드로 스트리밍됩니다. 버퍼로드 경계는 보낼 때 의미상 의미가 없습니다. 내용 스포츠 토토 스트림은 예상되는 스포츠 토토 형식과 일치해야 합니다.복사명령; 참조복사자세한 내용은.

PQputCopyEnd

동안 서버에 스포츠 토토 종료 표시를 보냅니다.COPY_IN상태.

int PQputCopyEnd(PGconn *conn,
                 const char *errormsg);

종료COPY_IN작동 성공 만일errormsgisNULL. 만일errormsg아님NULL그러면복사다음이 가리키는 문자열로 인해 강제로 실패합니다.errormsg오류 메시지로 사용됩니다. (하나는해야한다 이 정확한 오류 메시지가 다음에서 다시 나타날 것이라고 가정하지 마십시오. 그러나 서버가 이미 실패했을 수 있으므로복사그 나름대로의 이유가 있습니다. 또한 강제 실패 옵션을 사용할 때 작동하지 않습니다. 3.0 이전 프로토콜 연결.)

종료 스포츠 토토가 전송된 경우 결과는 1이고, 전송된 경우 0입니다. 시도가 차단될 수 있으므로 전송되지 않습니다(이 경우는 연결이 비차단 모드인 경우 가능) 또는 -1인 경우 오류가 발생했습니다. (사용PQerrorMessage반환 값이 -1인 경우 세부 정보를 검색합니다. 값이 0, 쓰기 준비가 될 때까지 기다린 후 다시 시도하세요.)

성공적으로 호출한 후PQputCopyEnd, 전화PQgetResult최종 결과 상태를 얻으려면복사명령. 이것을 기다릴 수 있습니다 일반적인 방법으로 결과를 얻을 수 있습니다. 그런 다음 정상으로 돌아갑니다. 작동합니다.

31.9.2. 수신 기능복사스포츠 토토

이 함수는 스포츠 토토를 수신하는 데 사용됩니다.STDOUT에 복사. 호출되면 실패합니다. 연결이 되지 않습니다.COPY_OUT상태.

PQgetCopyData

동안 서버로부터 스포츠 토토를 수신합니다.COPY_OUT상태.

int PQgetCopyData(PGconn *conn,
                  char **버퍼,
                  int 비동기);

동안 서버에서 다른 스포츠 토토 행을 얻으려고 시도합니다.복사. 스포츠 토토는 항상 하나의 스포츠 토토 행으로 반환됩니다. 한 번에; 부분 행만 사용할 수 있는 경우에는 반환되지 않습니다. 스포츠 토토 행을 성공적으로 반환하려면 해당 행의 청크를 할당해야 합니다. 스포츠 토토를 보관하는 메모리.버퍼매개변수는 비-이어야 합니다.NULL. *버퍼할당된 메모리를 가리키도록 설정되어 있습니다. 또는NULL버퍼가 없는 경우 돌아왔다. 비-NULL결과 버퍼는 다음과 같습니다. 다음을 사용하여 해제됩니다.PQfreemem아니면 더 이상 필요하지 않습니다.

행이 성공적으로 반환되면 반환 값은 행의 스포츠 토토 바이트 수(이 값은 항상 다음보다 큽니다. 제로). 반환된 문자열은 항상 null로 종료됩니다. 아마도 텍스트에만 유용할 것입니다.복사. 0의 결과는 다음을 나타냅니다.복사아직 진행 중이지만 아직 사용 가능한 행이 없습니다(이것은 가능한 경우비동기사실입니다). 결과 -1은 다음을 나타냅니다.복사완료되었습니다. 에이 -2의 결과는 오류가 발생했음을 나타냅니다(참조)PQerrorMessage이유 때문에).

언제비동기참입니다(0이 아님),PQgetCopyData대기를 차단하지 않습니다. 입력용; 다음과 같은 경우 0을 반환합니다.복사아직 진행 중이지만 전체 행을 사용할 수 없습니다. (이에 케이스는 읽기 준비가 될 때까지 기다린 후 호출합니다.PQconsumeInput전화하기 전에PQgetCopyData다시.) 언제비동기거짓(0)입니다.PQgetCopyData스포츠 토토를 사용할 수 있을 때까지 차단됩니다. 또는 작업이 완료됩니다.

이후PQgetCopyData반환 -1, 전화PQgetResult최종합격을 위해 결과 상태복사명령. 하나는 할 수 있다 이 결과가 일반적인 방법으로 제공될 때까지 기다리십시오. 그런 다음 돌아오세요 정상 작동합니다.

31.9.3. 다음 용도로 사용되지 않는 함수:복사

이 함수는 이전 처리 방법을 나타냅니다.복사. 여전히 작동하지만 더 이상 사용되지 않습니다. 잘못된 오류 처리, 불편한 감지 방법으로 인해 스포츠 토토 끝, 바이너리 또는 비차단 지원 부족 환승.

PQgetline

줄바꿈으로 끝나는 문자 줄을 읽습니다(다음으로 전송됨). 서버) 크기의 버퍼 문자열로길이.

int PQgetline(PGconn *conn,
              char *버퍼,
              정수 길이);

이 기능은 최대 복사길이-1 문자를 버퍼에 넣고 종료되는 개행 문자를 변환합니다. 0바이트로 변환합니다.PQgetline반환EOF입력 종료 시, 전체인 경우 0 라인을 읽었으며 버퍼가 가득 차 있지만 종료되는 경우 1입니다. 개행 문자는 아직 읽혀지지 않았습니다.

응용 프로그램은 새 줄이 있는지 확인해야 합니다. 두 문자로 구성됨\., 서버가 결과 전송을 완료했음을 나타냅니다.복사명령. 응용 프로그램이 다음보다 많은 라인을 수신합니다.길이-1자 길이이므로 주의가 필요합니다. 확실히 인식합니다\.라인이 정확함 (예를 들어, 긴 스포츠 토토 라인의 끝을 실수로 착각하지 않습니다. 터미네이터 라인).

PQgetlineAsync

다음 행을 읽습니다.복사스포츠 토토(전송됨 서버에 의해) 차단 없이 버퍼로 들어갑니다.

int PQgetlineAsync(PGconn *conn,
                   char *버퍼,
                   int bufsize);

이 기능은 다음과 유사합니다.PQgetline, 그러나 애플리케이션에서 사용할 수 있습니다. 읽어야 해.복사스포츠 토토를 비동기적으로, 즉, 차단하지 않고. 발행한 후복사명령을 받고 a를 받았습니다.PGRES_COPY_OUT응답, 애플리케이션이 호출해야 함PQconsumeInput그리고PQgetlineAsync스포츠 토토 끝 신호가 나올 때까지 감지되었습니다.

달리PQgetline, 이 함수 스포츠 토토 끝을 감지하는 책임을 집니다.

호출할 때마다PQgetlineAsync할 것이다 완전한 스포츠 토토 행을 사용할 수 있는 경우 스포츠 토토를 반환합니다.libpq의 입력 버퍼입니다. 그렇지 않으면 스포츠 토토가 없습니다. 나머지 행이 도착할 때까지 반환됩니다. 이 함수는 -1을 반환합니다. 스포츠 토토 복사 끝 표시가 인식된 경우, 스포츠 토토가 없는 경우 0 사용 가능하거나 바이트 수를 나타내는 양수 스포츠 토토가 반환되었습니다. -1이 반환되면 호출자는 다음 호출을 해야 합니다.PQendcopy, 그런 다음 정상으로 돌아갑니다. 처리 중입니다.

반환된 스포츠 토토는 스포츠 토토 행 경계를 넘어 확장되지 않습니다. 만약에 전체 행이 한 번에 반환될 수도 있습니다. 하지만 만약 호출자가 제공한 버퍼가 너무 작아서 호출자가 보낸 행을 보유할 수 없습니다. 서버인 경우 부분 스포츠 토토 행이 반환됩니다. 텍스트 스포츠 토토 포함 이는 마지막으로 반환된 바이트가 다음인지 테스트하여 감지할 수 있습니다.\n아니요. (바이너리에서복사, 실제 구문 분석은복사스포츠 토토 형식이 필요합니다. 동등한 결정.) 반환된 문자열은 다음과 같습니다. null로 종료됩니다. (종료 null을 추가하려면 다음을 수행하십시오. 통과버프크기방보다 하나 작음 실제로 사용 가능합니다.)

PQputline

Null 종료 문자열을 서버로 보냅니다. 정상이면 0을 반환합니다. 그리고EOF문자열을 보낼 수 없는 경우.

int PQputline(PGconn *conn,
              const char *string);

복사시리즈에서 보낸 스포츠 토토 스트림 통화 수PQputline동일함 에서 반환한 형식입니다.PQgetlineAsync, 단, 애플리케이션은 그렇지 않습니다. 당 정확히 하나의 스포츠 토토 행을 보내야 합니다.PQputline전화; 부분적으로 라인을 보내도 괜찮습니다 또는 통화 당 여러 회선.

참고:이전포스트그레SQL프로토콜 3.0에서는 애플리케이션이 명시적으로 다음을 수행하는 데 필요했습니다. 두 문자를 보내세요\.마지막 줄로 전송이 완료되었음을 서버에 알리기 위해복사스포츠 토토. 이 기능은 여전히 작동하지만 더 이상 사용되지 않습니다. 그리고 특별한 의미\.될 수 있습니다 향후 릴리스에서는 제거될 예정입니다. 그것은 충분하다 전화PQendcopy다음을 보낸 후 실제 스포츠 토토입니다.

PQputnbytes

널로 끝나지 않는 문자열을 서버로 보냅니다. 다음과 같은 경우 0을 반환합니다. 알았어 그리고EOF만약 보낼 수 없다면 문자열.

int PQputnbytes(PGconn *conn,
                const char *버퍼,
                int nbytes);

이것은 정확히 같습니다PQputline, 단, 스포츠 토토 버퍼는 null로 종료될 필요가 없습니다. 보낼 바이트 수는 직접 지정됩니다. 이 절차를 사용하십시오 바이너리 스포츠 토토를 보낼 때.

PQendcopy

서버와 동기화합니다.

int PQendcopy(PGconn *conn);

이 기능은 서버가 복사를 완료할 때까지 기다립니다. 마지막 문자열이 전송될 때 발행되어야 합니다. 사용하는 서버PQputline또는 언제 마지막 문자열은 다음을 사용하여 서버로부터 수신되었습니다.PGgetline. 발급받아야 하거나, 서버가 얻을 것이다"동기화되지 않음"와 함께 클라이언트. 이 함수에서 반환되면 서버는 다음 작업을 수행할 준비가 됩니다. 다음 SQL 명령을 수신합니다. 성공 시 반환 값은 0입니다. 완료, 그렇지 않으면 0이 아닙니다. (사용PQerrorMessage반환된 경우 세부정보를 검색합니다. 값은 0이 아닙니다.)

사용 시PQgetResult, 애플리케이션은 a에 응답해야 합니다.PGRES_COPY_OUT실행에 의한 결과PQgetline반복적으로, 이어서PQendcopy종료 줄이 표시된 후. 그것 그러면 다음으로 돌아가야 합니다.PQgetResult다음까지 반복PQgetResult널을 반환합니다. 포인터. 마찬가지로PGRES_COPY_IN결과 일련의에 의해 처리됩니다.PQputline다음 호출PQendcopy그러면 으로 돌아갑니다.PQgetResult루프. 이 합의는 다음을 보장합니다.복사명령어가 일련의에 포함되어 있습니다.SQL명령이 올바르게 실행됩니다.

이전 신청서는 다음을 제출할 가능성이 높습니다.복사경유PQexec그리고 이후에 거래가 완료되었다고 가정합니다.PQendcopy. 이는 다음과 같은 경우에만 올바르게 작동합니다.복사유일한SQL명령 문자열의 명령.