토토 꽁 머니 명령포스트그레SQL읽거나 쓸 수 있는 옵션이 있습니다 다음에서 사용하는 네트워크 연결로libpq. 그래서 꼭 필요한 기능이 이 네트워크 연결에 직접 액세스하여 애플리케이션이 이 기능의 장점을 활용하세요.
이 기능은 다음을 얻은 후에만 실행되어야 합니다.PGRES_토토 꽁 머니_OUT또는PGRES_토토 꽁 머니_IN결과 객체PQexec또는PQgetResult.
PQgetline읽기
줄 바꿈으로 끝나는 문자 줄(에 의해 전송됨)
백엔드 서버)를 길이 길이의 버퍼 문자열로 변환합니다.
int PQgetline(PGconn *conn,
문자 *문자열,
정수 길이)
좋아요fgets, 이 루틴
최대 length-1 문자를 문자열에 복사합니다. 그것은 같다얻음그러나 그 점에서는
종료 줄 바꿈을 0바이트로 변환합니다.PQgetline반환EOF입력 끝에서 전체 줄인 경우 0
읽었으며, 버퍼가 가득 차 있지만 1이면
개행 종료는 아직 읽혀지지 않았습니다.
응용프로그램은 새로운 줄은 두 문자로 구성됩니다.\., 이는 백엔드 서버가 복사 명령 결과 전송이 완료되었습니다. 만약 애플리케이션이 length-1보다 큰 행을 수신할 수 있습니다. 문자가 길기 때문에 인식할 수 있도록 주의가 필요합니다.\.라인이 정확합니다(그리고 그렇지 않습니다. 예를 들어, 긴 데이터 라인의 끝을 종결자로 착각합니다. 라인). 코드는src/bin/psql/토토 꽁 머니.c예제 루틴이 포함되어 있습니다. 복사 프로토콜을 올바르게 처리합니다.
PQgetlineAsync읽기
줄 바꿈으로 끝나는 문자 줄(에 의해 전송됨)
백엔드 서버)를 차단하지 않고 버퍼에 넣습니다.
int PQgetlineAsync(PGconn *conn,
char *버퍼,
int bufsize)
이 루틴은 다음과 유사합니다.PQgetline, 하지만 다음에서 사용할 수 있습니다.
COPY 데이터를 비동기식으로 읽어야 하는 애플리케이션, 즉
차단하지 않고. 토토 꽁 머니 명령을 실행하고 다음을 얻었습니다.PGRES_토토 꽁 머니_OUT응답,
애플리케이션이 호출되어야 합니다.PQconsumeInput그리고PQgetlineAsync데이터 끝 신호까지
감지됩니다. 달리PQgetline,
이 루틴은 데이터 끝을 감지하는 역할을 합니다.
통화할 때마다,PQgetlineAsync완전히 줄바꿈으로 끝나는 데이터 라인인 경우 데이터를 반환합니다.
다음에서 사용할 수 있습니다.libpq의
입력 버퍼 또는 들어오는 데이터 라인이 너무 길어서 맞지 않는 경우
호출자가 제공한 버퍼에 있습니다. 그렇지 않으면 데이터가 없습니다.
나머지 줄이 도착할 때까지 반환됩니다.
데이터 복사 끝 표시가 다음과 같은 경우 루틴은 -1을 반환합니다.
인식되었습니다. 데이터가 없으면 0, 양수입니다.
반환된 데이터의 바이트 수를 나타내는 숫자입니다. -1인 경우
반환되면 발신자는 다음 통화를 해야 합니다.PQend토토 꽁 머니, 그런 다음 정상으로 돌아갑니다.
처리. 반환된 데이터는 다음 이상으로 확장되지 않습니다.
개행 문자. 가능하다면 전체 라인이 반환됩니다.
한 번에. 그러나 호출자가 제공한 버퍼가 너무
백엔드에서 전송한 라인을 보관하기 위한 작은 크기, 그 다음에는 부분 데이터
라인이 반환됩니다. 이는 테스트를 통해 감지할 수 있습니다.
마지막으로 반환된 바이트가 무엇인지 여부\n아니다. 반환된 문자열은 null로 끝나지 않습니다. (당신이
종료 null을 추가하려면 a를 전달해야 합니다.버프크기다음보다 하나 작음
실제로 사용 가능한 방입니다.)
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. 발급되거나 백엔드에 있어야 합니다.
얻을 수 있다"동기화되지 않음"와 함께
프론트엔드. 이 함수에서 반환되면 백엔드는 다음과 같습니다.
다음 SQL 명령을 받을 준비가 되었습니다. 반환 값은 0입니다.
성공적으로 완료되면, 그렇지 않으면 0이 아닙니다.
int PQend토토 꽁 머니(PGconn *conn);
예를 들면:
PQexec(conn, "CREATE TABLE foo (a int4, b char(16), d 배정밀도)"); PQexec(conn, "STDIN에서 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명령 문자열의 명령.