the토토명령PostgreSQL읽거나 쓸 수있는 옵션이 있습니다 에 사용 된 네트워크 연결에libpq. 이것에 설명 된 기능 섹션에서는 응용 프로그램 이이 기능을 활용할 수 있도록합니다 복사 된 데이터를 공급하거나 소비함으로써.
전체 프로세스는 응용 프로그램이 먼저 발행한다는 것입니다.
SQL토토PQEXEC
또는 동등한 함수 중 하나. 그만큼
이것에 대한 응답 (명령에 오류가없는 경우)은 A입니다.pgresult상태 코드를 가진 객체
의pgres_토토_out또는pgres_토토_in(지정된 사본에 따라
방향). 그런 다음 응용 프로그램은 이것의 함수를 사용해야합니다
데이터 행을 수신하거나 전송할 섹션. 데이터 전송시
완료, 또 다른pgresult개체
이체의 성공 또는 실패를 나타 내기 위해 반환됩니다. 그것은
상태는pgres_command_ok성공 또는pgres_fatal_error일부 경우
문제가 발생했습니다. 이 시점에서 추가 SQL 명령은 할 수 있습니다
를 통해 발행됩니다.PQEXEC
. (그렇지 않습니다
동일한 연결을 사용하여 다른 SQL 명령을 실행할 수 있습니다.
동안토토작동 중입니다
진전.)
if a토토명령은를 통해 발행됩니다PQEXEC
할 수있는 문자열로
추가 명령이 포함되어 있으므로 응용 프로그램은 계속되어야합니다
를 통해 결과 가져 오기pqgetresult
완료 후토토시퀀스. 오직
언제pqgetresult
반환NULL확실합니까PQEXEC
명령 문자열이 완료되었으며 안전합니다
더 많은 명령을 발행합니다.
이 섹션의 기능은 다음에 만 실행해야합니다.
결과 상태 얻기pgres_토토_out또는pgres_토토_inFromPQEXEC
또는pqgetresult
.
apgresult객체 중 하나 이러한 상태 값은토토시작중인 작동. 이것 추가 데이터는 사용되는 기능을 사용하여 사용할 수 있습니다. 쿼리 결과와 관련하여 :
pqnfields
복사 할 열 (필드) 수를 반환합니다.
pqbinaryTuples
0 전체 사본 형식은 텍스트입니다 (행입니다 Newlines로 분리 된 열은 분리기로 분리됩니다 캐릭터 등). 1은 전체 사본 형식을 나타냅니다 이진. 보다토토더 많은 정보.
pqfformat
형식 코드를 반환합니다 (텍스트의 경우 0, 이진의 경우 1) 사본 조작의 각 열과 관련이 있습니다. 그만큼 컬럼 당 형식 코드는 항상 0이됩니다 전체 복사 형식은 텍스트이지만 이진 형식은 텍스트와 이진 열 모두를 지원합니다. (그러나, 현재 구현토토, 바이너리 컬럼 만 이진 사본에 나타납니다. 그래서 컬럼 당 형식은 항상 전체 형식과 일치합니다 현재의.)
참고 :이러한 추가 데이터 값은 전용입니다 프로토콜 3.0을 사용할 때 사용할 수 있습니다. 프로토콜 2.0을 사용할 때 이 모든 기능은 0을 반환합니다.
이 기능은 동안 데이터를 보내는 데 사용됩니다.stdin에서 복사. 언제 전화하면 그들은 실패 할 것입니다 연결이 없습니다토토_inState.
pqput토토data
기간 동안 서버로 데이터를 보냅니다토토_inState.
int pqput토토data (pgconn *conn, const char *버퍼, int nbytes);
전송토토데이터 in
지정된버퍼, OF
길이nbytes, 서버.
결과는 데이터를 전송 한 경우 1입니다.
시도가 차단 될 것이기 때문에 전송됩니다 (이 경우는
연결이 비 차단 모드에있는 경우 가능), 또는 -1
오류가 발생한 경우. (사용PQERRORMESSAGE
세부 정보를 검색하려면
반환 값은 -1입니다. 값이 0이면 기다리십시오
글을 쓰고 다시 시도하십시오.)
응용 프로그램이를 나눌 수 있습니다토토데이터 스트림이 버퍼로드로 스트림 편리한 크기. 버퍼로드 경계는 의미 론적이 없습니다 보낼 때의 중요성. 데이터의 내용 스트림은에서 기대하는 데이터 형식과 일치해야합니다.토토명령; 보다토토자세한 내용.
PQPUT토토END
기간 동안 서버에 데이터 종료 표시를 보냅니다토토_inState.
int pqput토토end (pgconn *conn, const char *errormsg);
종료토토_in작동 성공적으로errormsgisNULL. 만약에errormsgnull그런 다음토토|errormsg오류로 사용됩니다 메시지. (이 정확한 오류를 가정해서는 안됩니다 그러나 메시지는 서버에서 돌아올 것입니다. 서버가 이미 실패했을 수도 있습니다토토자체 이유로. 또한 주목하십시오 사용시 강제 실패 옵션은 작동하지 않습니다. 3.0 pre-protocol 연결.)
종료 데이터가 전송 된 경우 결과는 1입니다.
시도가 차단 될 것이기 때문에 보내지 않은 경우
연결이 차단되지 않은 경우에만 사례가 가능합니다.
오류가 발생한 경우 모드), 또는 -1. (사용PQERRORMESSAGE
반환 값은 -1입니다. 값이 0이면 기다리십시오
글을 쓰고 다시 시도하십시오.)
성공적으로 전화 한 후PQPUT토토END
, Callpqgetresult
최종 결과를 얻으려면
상태의 상태토토명령. 하나
이 결과가 평소에서 사용할 수있을 때까지 기다릴 수 있습니다.
방법. 그런 다음 정상 작동으로 돌아갑니다.
이 기능은 동안 데이터를 수신하는 데 사용됩니다.stdout에 복사. 언제 전화하면 그들은 실패 할 것입니다 연결이 없습니다토토_outState.
pqget토토Data
기간 동안 서버로부터 데이터 수신토토_outState.
int pqget토토data (pgconn *conn, char ** 버퍼, int async);
서버에서 다른 행의 데이터 행을 얻으려고합니다.
동안토토. 데이터는 항상입니다
한 번에 하나의 데이터 행을 반환했습니다. 부분 행만 인 경우
사용 가능하면 반환되지 않습니다. a의 성공적인 반환
데이터 행에는 유지할 메모리 청크를 할당하는 것이 포함됩니다.
데이터. 그만큼버퍼매개 변수
비이어야합니다NULL. *버퍼는 할당 된 것을 가리 키도록 설정되었습니다
기억 또는NULL어디에서
버퍼가 반환되지 않습니다. 비NULL결과 버퍼를 사용하여 해제해야합니다PQFREEMEM
더 이상 필요하지 않은 경우.
행이 성공적으로 반환되면 반환 값
행의 데이터 바이트 수입니다 (이것은 항상
0보다 큽니다). 반환 된 문자열은 항상입니다
무효가 종결되었지만 이것은 아마도 유용 할 것입니다
텍스트토토. 0의 결과
를 나타냅니다.토토아직도 있습니다
진행 중이지만 아직 사용 가능한 행이 없습니다 (이것은
가능 가능async참).
-1의 결과는임을 나타냅니다.토토완료되었습니다. -2의 결과가 나타납니다
오류가 발생했다 (ConsultPQERRORMESSAGE
이유가 있습니다).
언제asynctrue (아님
영),pqget토토Data
의지
입력 대기를 차단하지 않습니다. 이면 0을 반환합니다.토토아직 진행 중이지만 아니요
완전한 행을 사용할 수 있습니다. (이 경우 기다립니다
읽기 준비 후 전화pqconsumeInput
호출 전pqget토토Data
다시.) 언제asyncfalse (0),pqget토토Data
블록
데이터를 사용할 수 있거나 작업이 완료 될 때까지
이후pqget토토Data
returns -1, callpqgetresult
최종 결과를 얻으려면
상태의 상태토토명령. 하나
이 결과가 평소에서 사용할 수있을 때까지 기다릴 수 있습니다.
방법. 그런 다음 정상 작동으로 돌아갑니다.
이러한 기능은 오래된 취급 방법을 나타냅니다토토. 그들은 여전히 일하지만 그들은 잘못된 오류 처리, 불편한 방법으로 인해 더 이상 사용되지 않습니다 데이터 종료 감지 및 이진에 대한 지원 부족 또는 비 차단 전송.
pqgetline
새로운 문자 라인을 읽습니다 (서버에 의해 전송) 크기의 버퍼 문자열로길이.
int pqgetline (pgconn *conn, char *버퍼, int 길이);
이 기능은 최대까지 복사합니다.길이-1 문자 버퍼에
종단 Newline을 제로 바이트로 변환합니다.pqgetline
반환eof입력 끝에서 0 인 경우 0
전체 라인을 읽고 버퍼가 가득 찬 경우 1
그러나 종료 Newline은 아직 읽지 않았습니다.
신청서가 새로운 지 확인해야합니다. 라인은 두 문자로 구성됩니다\., 서버에 가지고 있음을 나타냅니다 의 결과 보내기 완료토토명령. 응용 프로그램이 가능하다면 이상의 줄을받습니다.길이-1 문자 길이, 치료가 필요합니다 그것이 인식하기 위해\.올바르게 줄을 올리십시오 (예를 들어, 실수하지 않습니다 터미네이터 라인에 대한 긴 데이터 라인의 끝).
PQGETLINEASYNC
행을 읽는다토토데이터 (서버에 의해 전송) 버퍼없이 블로킹.
int pqgetLineAneCync (pgconn *conn, char *버퍼, int bufsize);
이 기능은와 유사합니다.pqgetline
이지만 사용할 수 있습니다
읽어야하는 응용 프로그램토토데이터 비동기 적으로, 즉 차단하지 않고. 가요
발행토토명령 및
apgres_토토_out응답, 신청서가 호출해야합니다pqconsumeInput
andpqgetLineAnync
데이터 종료까지
신호가 감지됩니다.
와 달리pqgetline
,이
함수는 감지에 책임이 있습니다
데이터 끝.
각 호출에서pqgetLineAnsync
a
완전한 데이터 행을 사용할 수 있습니다libpq의 입력 버퍼. 그렇지 않으면 아니요
나머지 행이 도착할 때까지 데이터가 반환됩니다. 그만큼
코피 종료 데이터 마커가있는 경우 함수는 -1을 반환합니다
데이터를 사용할 수없는 경우 인식되었거나 0
데이터의 바이트 수를 제공하는 양수
반환. -1이 반환되면 발신자는 다음 호출PQEND토토
정상 처리에.
반환 된 데이터는 데이터 행을 넘어 확장되지 않습니다 경계. 가능하면 전체 행이 하나로 반환됩니다. 시간. 그러나 발신자가 제공하는 버퍼가 서버에서 보낸 행을 보유하기 위해 작은 데이터 행이 반환됩니다. 텍스트 데이터를 사용하면 다음과 같습니다 마지막으로 반환 된 바이트가를 테스트하여 감지\ n(이진에서토토, 실제 구문 분석토토데이터 형식이 필요합니다 동등한 결정을 내립니다.) 반환 문자열은 무효가 끝나지 않습니다. (추가하려면 a 널 종료, 확실히 A를 통과하십시오.bufsize방보다 작은 하나 실제로 사용할 수 있습니다.)
pqputline
서버에 null 종결 문자열을 보냅니다. 보고 0 인 경우eof보낼 수없는 경우 문자열.
int pqputline (pgconn *conn, const char *string);
the토토데이터 스트림이 보냈습니다
일련의 전화pqputline
그 형식과 동일한 형식이 있습니다
반품pqgetLineAnsync
,
신청서는 정확히 전송해야 할 의무가 없습니다
당 하나의 데이터 행pqputline
전화; 부분 줄 또는 여러 줄을 보내는 것은 괜찮습니다.
전화 당.
참고 :전PostgreSQL프로토콜 3.0 신청서가 명시 적으로 보내는 데 필요합니다 두 문자\.최종 서버에 완료되었음을 나타내는 줄 배상토토데이터. 하는 동안 이것은 여전히 작동하며 감가 상각되고 특별합니다 의 의미\.할 수 있습니다 향후 릴리스에서 제거 될 것으로 예상됩니다. 그것은 전화하기에 충분
PQEND토토
후 실제 데이터.
PQPUTNBYTES
서버로 널리 터진 문자열을 보냅니다. OK이고 0을 반환합니다.eof불가능한 경우 문자열을 보내려면.
int pqputnbytes (pgconn *conn, const char *버퍼, int nbytes);
이것은 똑같습니다pqputline
, 데이터 버퍼를 제외하고
바이트 수가 이후로 무의미한 말을 할 필요는 없습니다.
Send는 직접 지정됩니다. 이 절차를 사용하십시오
이진 데이터 보내기.
PQEND토토
서버와 동기화됩니다.
int pqend토토 (pgconn *conn);
이 함수는 서버가 끝날 때까지 기다립니다
사자. 마지막 문자열이있을 때 발행해야합니다
를 사용하여 서버로 전송되었습니다.pqputline
또는 마지막 문자열이있는 경우
를 사용하여 서버로부터 접수되었습니다.pggetline
. 발행해야합니다
서버가 얻을 수 있습니다"out in sync"클라이언트와. 이 기능에서 돌아 왔을 때
서버는 다음 SQL 명령을받을 준비가되었습니다. 그만큼
성공적인 완료시, 0이 아닌 반환 값은 0입니다
그렇지 않으면. (사용PQERRORMESSAGE
반환 값은 0이 아닙니다.)
사용시pqgetresult
,
응용 프로그램은 A에 응답해야합니다.pgres_토토_out실행하여 결과pqgetline
반복적으로,
뒤 이어PQEND토토
터미네이터 라인이 표시됩니다. 그런 다음로 돌아 가야합니다.pqgetresult
루프까지pqgetresult
NULL을 반환합니다
바늘. 마찬가지로 Apgres_토토_in결과는 a
일련의pqputline
전화
뒤 이어PQEND토토
로 돌아 가기pqgetresult
루프. 이 계약은 A를 보장합니다.토토일련의 명령SQL명령이 될 것입니다
올바르게 실행.
이전 응용 프로그램이 a를 제출할 가능성이 높습니다.토토viaPQEXEC
그리고 거래를 가정합니다
이후에 완료되었습니다.PQEND토토
.
이것은 만 올바르게 작동합니다.토토유일한SQL명령의 명령
끈.