이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 32.10. 토토 결과 토토 결과과 토토 결과 토토 결과버전 또는 위에 나열된 다른 지원되는 버전 중 하나입니다.

1.6. 젠 토토 명령과 관련된 함수

젠 토토 명령Postgres사용 된 네트워크 연결에서 읽거나 쓸 수있는 옵션이 있습니다. 에 의해libpq. 따라서 기능은 다음과 같습니다 이 네트워크 연결에 직접 액세스하는 데 필요합니다 응용 프로그램은이 기능을 활용할 수 있습니다.

이 기능은 a를 얻은 후에 만 ​​실행해야합니다.pgres_copy_out또는pgres_copy_in결과 객체에서PQEXEC또는pqgetresult.

  • pqgetlinea Newline-Terminated 문자 라인 ( 백엔드 서버) 크기 길이의 버퍼 문자열로.

    int pqgetline (pgconn *conn,
                  char *string,
                  int 길이)
    Likefgets(3),이 일상적인 젠 토토 최대 1 개의 문자 문자열.gets12185_12268pqgetline반환eofa eof, 0 전체 라인을 읽고 버퍼가 가득 찬 경우 1 그러나 종료 Newline은 아직 읽지 않았습니다.

    신청서가 새로운 지 확인 해야하는지 확인해야합니다. 라인은 두 문자 "\."로 구성됩니다 백엔드 서버가 결과 전송을 완료했습니다. 젠 토토 명령. 응용 프로그램이 줄을받을 수있는 경우 길이가 길고 길이가 길고 치료가 필요합니다. 물론 하나는 "\"를 인식합니다. 올바르게 라인 (그리고 그렇지 않습니다. 예를 들어, 긴 데이터 라인의 끝을 터미네이터 라인). 코드src/bin/psql/copy.c예제 루틴을 포함합니다 젠 토토 프로토콜을 올바르게 처리합니다.

  • pqgetlineAnync읽기 a Newline-Terminated 문자 라인 ( 백엔드 서버) 차단없이 버퍼로.

    int pqgetLineAneCync (pgconn *conn,
                       char *버퍼,
                       int bufsize)
    이 루틴은와 유사합니다.pqgetline그러나 응용 프로그램에서 사용할 수 있습니다 복사 데이터를 비동기 적으로 읽어야합니다. 젠 토토 명령을 발행하고 Apgres_copy_out응답, 신청서가 호출해야합니다pqconsumeInputandpqgetLineAnync데이터 종료 신호까지 감지됩니다. 같지 않은pqgetline,이 일상은 데이터 끝을 감지하는 데 책임이 있습니다. ~에 각 전화,pqgetLineAnync의지 완전한 Newline- 종료 데이터 라인이있는 경우 반환 데이터 libpq의 입력 버퍼에서 사용 가능하거나 들어오는 데이터 인 경우 라인은 발신자가 제공하는 버퍼에 맞지 않기에는 너무 길다. 그렇지 않으면 나머지 라인까지 데이터가 반환되지 않습니다. 도착.

    코피 종료 데이터 마커가있는 경우 루틴은 -1을 반환합니다 데이터를 사용할 수없는 경우 인식되었거나 0, 또는 긍정적 인 반환 된 데이터의 바이트 수를 제공하는 숫자. -1이면 반품, 발신자는 다음 전화해야합니다PQENDCOPY그리고 정상으로 돌아갑니다 처리. 반환 된 데이터는 a를 넘지 않습니다 Newline 캐릭터. 가능하면 전체 라인이 반환됩니다 한 번에. 그러나 발신자가 제공하는 버퍼가 백엔드가 전송 한 줄을 보유하고 부분 데이터를 보유하고 있습니다. 라인이 반환됩니다. 테스트를 통해 감지 할 수 있습니다 마지막 반환 바이트가 "인지 여부\ n"여부는 반환 된 문자열이 아닙니다 널리 터진. (종료 Null을 추가하려면 BE를 추가하려면 실제로 방보다 작은 bufsize를 통과하십시오. 사용 가능.)

  • pqputline보내기 a 백엔드 서버에 NULL이 종료 된 문자열. IF가 0을 반환합니다 좋아요,eof보낼 수없는 경우 끈.

    int pqputline (pgconn *conn,
                  const char *string);
    참고 응용 프로그램은 두 문자를 명시 적으로 보내야합니다 "\."최종 줄에서 데이터 전송을 마쳤다는 백엔드.
  • pqputnbytes보내기 a 백엔드 서버에 대한 널없는 문자열. 반환 0 OK 인 경우 문자열을 보낼 수없는 경우 EOF.

    int pqputnbytes (pgconn *conn,
                    const char *버퍼,
                    int nbytes);
    이것은 똑같습니다pqputline, 데이터 버퍼를 보내야 할 바이트 수는 직접 지정됩니다.
  • PQENDCOPY백엔드. 이 기능은 백엔드가 끝날 때까지 기다립니다 젠 토토. 마지막 문자열에있을 때 발행해야합니다. 를 사용하여 백엔드로 전송되었습니다.pqputline또는 마지막 문자열이있을 때 사용를 사용하여 백엔드에서받은pggetline. 발급되거나 백엔드가 있어야합니다 프론트 엔드와 "동기화"를 얻을 수 있습니다. 돌아 왔을 때 이 기능, 백엔드는 다음을받을 준비가되었습니다. 질문. 성공적인 완료시 반환 값은 0입니다. 그렇지 않으면 0이 아닌 것입니다.

    int pqendcopy (pgconn *conn);

    예를 들어 :

    pqexec (Conn, "테이블 foo (in int4, b char (16), d double precision));
    pqexec (conn, "stdin에서 foo를 복사한다");
    pqputline (Conn, "3 \ Thello World \ t4.5 \ n");
    pqputline (conn, "4 \ tgoodbye world \ t7.11 \ n");
    ...
    pqputline (conn, "\\. \ n");
    pqendcopy (conn);

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

이전 응용 프로그램은 사본을 제출하거나 복사 할 가능성이 높습니다. 을 통해PQEXEC트랜잭션은 이후에 이루어집니다.PQENDCOPY. 이것은 젠 토토/아웃이 유일한 경우에만 올바르게 작동합니다SQL쿼리 문자열의 명령.