이 문서는 지원되지 않는 버전의 스포츠 토토을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 32.10. 토토 결과 토토 결과과 토토 결과 토토 결과버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

31.9. 와 스포츠 토토 기능copy명령

copy명령스포츠 토토읽거나 쓸 수있는 옵션이 있습니다 에 사용 된 네트워크 연결에libpq. 이 섹션에 설명 된 기능 응용 프로그램 이이 기능을 활용할 수 있도록합니다 복사 스포츠 토토 공급 또는 소비.

전체 프로세스는 응용 프로그램이 먼저 SQL을 발행한다는 것입니다.copyPQEXEC또는 동등한 함수 중 하나. 그만큼 이것에 대한 응답 (명령에 오류가없는 경우)은 A입니다.pgresult상태 코드를 갖는 객체 의pgres_copy_out또는pgres_copy_in(지정된 사본에 따라 방향). 그런 다음 응용 프로그램은 이것의 함수를 사용해야합니다 스포츠 토토 행을 수신하거나 전송할 섹션. 스포츠 토토 전송이있을 때 완료, 다른pgresult객체입니다 이체의 성공 또는 실패를 나타 내기 위해 반환되었습니다. 그 상태pgres_command_ok성공 또는pgres_fatal_error문제가 있었다면 만난. 이 시점에서 추가 SQL 명령은를 통해 발행 될 수 있습니다.PQEXEC. (불가능합니다 동일한 연결을 사용하여 다른 SQL 명령을 실행하는 동안COPY운영 진행 중입니다.)

if aCOPY명령은를 통해 발행됩니다.PQEXEC포함 할 수있는 문자열 추가 명령, 응용 프로그램은 계속해서 결과를 가져와야합니다 을 통해pqgetresult완료 후COPY시퀀스. 만pqgetresult반환NULL확실합니까PQEXEC명령 문자열이 완료되었고 더 많은 명령을 발행하는 것이 안전합니다.

이 섹션의 기능은 다음에 만 실행해야합니다. 결과 상태 얻기pgres_copy_out또는pgres_copy_inFromPQEXEC또는pqgetresult.

apgresult객체 중 하나를 갖고 있습니다 이러한 상태 값은COPY시작중인 작동. 이것 추가 스포츠 토토는 쿼리 결과와의 연결 :

pqnfields

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

pqbinaryTuples

0 전체 스포츠 토토 형식이 텍스트임을 나타냅니다 (행은 분리되었습니다. Newlines에 의해, 구분자 문자 등으로 분리 된 열). 1 전체 복사 형식은 이진임을 나타냅니다. 보다COPY자세한 내용은

pqfformat

형식 코드를 반환합니다 (텍스트의 경우 0, 이진의 경우 1) 사본 조작의 각 열에. 컬럼 당 형식 코드 전체 복사 형식이 텍스트 일 ​​때 항상 0이지만 이진 형식은 텍스트 및 이진 열 모두를 지원할 수 있습니다. (그러나 현재의 구현시COPY, 이진 기둥만이 이진 사본에 나타납니다. 따라서 콜럼 당 형식은 항상 전체 형식과 일치합니다. 현재의.)

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

31.9.1. 전송 기능copy스포츠 토토

이 기능은 동안 스포츠 토토를 보내는 데 사용됩니다.stdin에서 복사. 그들은 전화하면 실패 할 것이다 연결이 없습니다copy_inState.

pqputcopydata

기간 동안 서버로 스포츠 토토를 보냅니다copy_inState.

int pqputcopydata (pgconn *conn,
                  const char *버퍼,
                  int nbytes);

전송copy스포츠 토토의 스포츠 토토 지정된버퍼, 길이nbytes, 서버. 스포츠 토토는 1입니다 시도가 차단 될 것이기 때문에 전송되지 않으면 제로가 전송되었습니다. (이 경우 연결이 차단되지 않은 경우에만 가능합니다. 오류가 발생한 경우 모드), 또는 -1. (사용PQERRORMESSAGE반품이면 세부 정보를 검색합니다 값은 -1입니다. 값이 0 인 경우 쓰기 준비를 기다리고 시도하십시오. 다시.)

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

PQPUTCOPYEND

기간 동안 서버에 스포츠 토토 종료 표시를 보냅니다copy_inState.

int pqputcopyend (pgconn *conn,
                 const char *errormsg);

종료copy_in성공적으로 작동 만약에errormsgisNULL. 만약에errormsgNULL그런 다음copy|errormsg오류 메시지로 사용됩니다. (하나 야 이 정확한 오류 메시지가 그러나 서버가 이미 실패했을 수 있으므로COPY자체 이유로. 또한 주목하십시오 사용시 강제 실패 옵션은 작동하지 않습니다. 3.0 pre-protocol 연결.)

종료 스포츠 토토가 전송 된 경우 결과는 1입니다. 시도가 차단 될 것이기 때문에 전송되지 않습니다 (이 경우는 연결이 비 차단 모드에있는 경우 가능), 또는 -1 인 경우 오류가 발생했습니다. (사용PQERRORMESSAGE반환 값이 -1 인 경우 세부 사항을 검색합니다. 가치가 있다면 제로, 쓰기 준비를 기다리고 다시 시도하십시오.)

성공적으로 전화 한 후PQPUTCOPYEND, Callpqgetresult최종 결과 상태를 얻으려면 그만큼COPY명령. 이것을 기다릴 수 있습니다 결과적으로 사용할 수 있습니다. 그런 다음 정상으로 돌아갑니다 작업.

31.9.2. 수신 기능COPY스포츠 토토

이 기능은 동안 스포츠 토토를 수신하는 데 사용됩니다.stdout에 복사. 그들은 전화하면 실패 할 것이다 연결이 없습니다Copy_outState.

PQGETCOPYDATA

기간 동안 서버로부터 스포츠 토토 수신Copy_outState.

int pqgetcopydata (pgconn *conn,
                  char ** 버퍼,
                  int async);

a 동안 서버에서 다른 행의 스포츠 토토 행을 얻으려고 시도합니다.copy. 스포츠 토토는 항상 하나의 스포츠 토토 행이 반환됩니다 한 번에; 부분 행만 사용할 수 있으면 반환되지 않습니다. 스포츠 토토 행을 성공적으로 반환하면 스포츠 토토를 보유하는 메모리. 그만큼버퍼매개 변수는 비 여야합니다NULL. *버퍼할당 된 메모리를 가리키도록 설정되어 있습니다. or toNULL버퍼가없는 경우 반환. 비null결과 버퍼는해야합니다 를 사용하여 해방PQFREEMEM더 오래 필요합니다.

행이 성공적으로 반환되면 반환 값은 행의 스포츠 토토 바이트 수 (이것은 항상 영). 반환 된 문자열은 항상 무효로 종료됩니다 아마도 텍스트에만 유용 할 것입니다copy. 0의 결과는임을 나타냅니다.copy아직 진행 중이지만 아직 사용 가능한 행이 없습니다 (이것은 가능 가능async참). 결과 -1의COPY완료되었습니다. 에이 -2의 결과는 오류가 발생했음을 나타냅니다 (ConsultPQERRORMESSAGE이유가 있습니다).

언제asynctrue (제로가 아님),pqgetCopyData대기를 차단하지 않습니다 입력을 위해; 이면 0을 반환합니다.COPY아직 진행 중이지만 완전한 행을 사용할 수 없습니다. (이것에서 사례는 읽기 준비를 기다린 다음 전화pqconsumeInput전화 전pqgetCopyData다시.) 언제async거짓 (0),pqgetCopyData스포츠 토토를 사용할 수있을 때까지 차단됩니다 또는 작업이 완료됩니다.

이후pqgetCopyData반환 -1, 부르다pqgetresult결승을 얻으려면 의 결과 상태COPY명령. 하나는 할 수 있습니다 이 결과가 일반적인 방식으로 제공 될 때까지 기다리십시오. 그런 다음 돌아옵니다 정상적인 작동에.

31.9.3. 에 대한 쓸모없는 기능COPY

이러한 기능은 오래된 취급 방법을 나타냅니다COPY. 그들은 여전히 ​​작동하지만 더 이상 사용되지 않습니다 오류 처리가 잘못되면 불편한 감지 방법 스포츠 토토 종료 및 이진 또는 비 차단에 대한 지원 부족 전송.

pqgetline

새로운 문자 라인을 읽습니다 (전송 서버) 크기의 버퍼 문자열길이.

int pqgetline (pgconn *conn,
              char *버퍼,
              int 길이);

이 함수는까지 복사합니다.길이-1 버퍼에 캐릭터를 버퍼에 넣고 종료 Newline을 변환합니다 제로 바이트로.pqgetline반환eof입력 끝에서 전체가있는 경우 0 라인이 읽히고 1 버퍼가 가득 찼지만 종료 된 경우 1 Newline은 아직 읽지 않았습니다.

신청서에 새 줄이 있는지 확인해야합니다. 두 문자로 구성\.서버가의 결과 전송을 완료했음을 나타냅니다.COPY명령. 응용 프로그램이 가능하다면 이상의 줄을받습니다.길이-1 문자 길이, 치료가 필요합니다 확실히\.올바르게 라인 (예를 들어, 긴 스포츠 토토 라인의 끝을 오해하지는 않습니다. 터미네이터 라인).

pqgetLineAnsync

행을 읽는다COPY스포츠 토토 (전송 서버에 의해) 막히지 않고 버퍼로.

int pqgetlineasync (pgconn *conn,
                   char *버퍼,
                   int bufsize);

이 기능은와 유사합니다.pqgetline그러나 응용 프로그램에서 사용할 수 있습니다 읽어야 됨COPY스포츠 토토 비동기 적으로, 즉, 차단하지 않고. 발행COPY명령 및 apgres_copy_out응답, 신청서가 호출해야합니다pqconsumeInputpqgetLineAnync스포츠 토토 종료 신호가 될 때까지 감지.

와 달리pqgetline,이 기능 스포츠 토토 종료 감지에 대한 책임이 있습니다.

각 호출에서pqgetLineAnsync의지 반환 스포츠 토토 완전한 스포츠 토토 행을 사용할 수있는 경우libpq의 입력 버퍼. 그렇지 않으면 스포츠 토토가 없습니다 나머지 행이 도착할 때까지 돌아 왔습니다. 함수는 -1을 반환합니다 카피 종료 스포츠 토토 마커가 인식 된 경우 또는 스포츠 토토가없는 경우 0 이용 가능하거나 바이트 수를 제공하는 양수 스포츠 토토가 반환되었습니다. -1이 반환되면 발신자는 다음 호출PQENDCOPY그리고 정상으로 돌아갑니다 처리.

반환 된 스포츠 토토는 스포츠 토토 열 경계를 넘어 확장되지 않습니다. 만약에 가능한 전체 행이 한 번에 반환됩니다. 그러나 만약 발신자가 제공하는 버퍼는 너무 작아서 서버, 그러면 부분 스포츠 토토 행이 반환됩니다. 텍스트 스포츠 토토와 함께 마지막 반환 바이트가인지 테스트하여 감지 할 수 있습니다.\ n(이진에서copy, 실제 구문 분석copy동등한 결정.) 반환 된 문자열은 아닙니다 널리 터진. (종료 null을 추가하려면 통과bufsize방보다 작은 하나 실제로 사용할 수 있습니다.)

pqputline

서버에 null 종결 문자열을 보냅니다. OK 인 경우 0을 반환합니다 그리고eof문자열을 보낼 수없는 경우.

int pqputline (pgconn *conn,
              const char *string);

theCOPY시리즈가 전송하는 스포츠 토토 스트림 전화pqputlinehas the same 에 의해 반환 된 형식pqgetLineAnync, 응용 프로그램이 아닌 경우를 제외하고 정확히 하나의 스포츠 토토 행을 보낼 의무pqputline전화; 부분 줄을 보내는 것은 괜찮습니다 또는 전화 당 여러 줄.

참고 :스포츠 토토프로토콜 3.0, 응용 프로그램이 명시 적으로 필요했습니다. 두 문자 보내기\.최종 라인으로 서버에 송신을 마쳤다는 것을 나타내려면COPY스포츠 토토. 이것은 여전히 ​​작동하지만 감가 상각됩니다 그리고의 특별한 의미\.할 수 있습니다 향후 릴리스에서 제거 될 것으로 예상됩니다. 충분합니다 부르다PQENDCOPY후 실제 스포츠 토토.

PQPUTNBYTES

널이없는 문자열을 서버로 보냅니다. IF가 0을 반환합니다 좋아,eof보낼 수없는 경우 끈.

int pqputnbytes (pgconn *conn,
                const char *버퍼,
                int nbytes);

이것은 똑같습니다pqputline, 스포츠 토토 버퍼를 보내야 할 바이트 수는 직접 지정됩니다. 이 절차를 사용하십시오 이진 스포츠 토토를 보낼 때

PQENDCOPY

서버와 동기화됩니다.

int pqendcopy (pgconn *conn);

이 함수는 서버가 복사를 마칠 때까지 기다립니다. 마지막 문자열이 전송 될 때 발행해야합니다. 사용하는 서버pqputline또는 언제 마지막 문자열은를 사용하여 서버에서 수신되었습니다.pggetline. 발행해야합니다 서버가 얻을 수 있습니다"동기화"고객. 이 기능에서 돌아 왔을 때 서버는 다음 SQL 명령을받습니다. 반환 값은 성공시 0입니다 완료, 그렇지 않으면 0이 아닙니다. (사용PQERRORMESSAGE반품이면 세부 정보를 검색합니다 가치는 0이 아닙니다.)

사용시pqgetresult, 응용 프로그램은 A에 응답해야합니다.pgres_copy_out실행하여 결과pqgetline반복적으로PQENDCOPY터미네이터 라인이 보입니다. 그것 그런 다음로 돌아 가야합니다.pqgetresult루프까지pqgetresultNULL을 반환합니다 바늘. 마찬가지로 Apgres_copy_in결과 일련의에 의해 처리됩니다pqputline통화 후PQENDCOPY로 돌아 가기pqgetresult루프. 이것 계약은 A를 보장합니다.COPY일련의 명령SQL명령이 올바르게 실행됩니다.

이전 응용 프로그램이 A를 제출할 가능성이 높습니다copyviaPQEXEC및 거래가 이후에 이루어 졌다고 가정합니다PQENDCOPY. 이것은 만 올바르게 작동합니다.COPY유일한SQL명령 문자열의 명령.