사본 명령PostgreSQL읽거나 쓸 수있는 옵션이 있습니다 에 사용 된 네트워크 연결에libpq. 따라서 기능이 필요합니다 이 네트워크 연결에 직접 액세스하여 응용 프로그램이 필요할 수 있습니다 이 기능의 장점.
이러한 기능은 a를 얻은 후에 만 실행해야합니다.pgres_토토 커뮤니티_out또는pgres_토토 커뮤니티_in결과 객체에서PQEXEC
또는pqgetresult
.
pqgetline
읽기 a
Newline-Terminated 문자 라인 (
백엔드 서버) 크기 길이의 버퍼 문자열로.
int pqgetline (pgconn *conn, char *string, int 길이)
좋아요fgets
,이 루틴
최대 1 개의 문자를 문자열로 복사합니다.gets
종단 Newline을 제로 바이트로 변환합니다.pqgetline
반환eof입력 끝에서, 전체 라인 인 경우 0
버퍼가 가득 차면 읽었지만 1
Newline 종료는 아직 읽지 않았습니다.
신청서가 새로운 지 확인 해야하는지 확인해야합니다. 라인은 두 문자로 구성됩니다\.는 백엔드 서버를 나타냅니다 사본 명령의 결과를 완료했습니다. 만약 응용 프로그램은 길이 1 이상의 줄을받을 수 있습니다 캐릭터는 길고, 치료가 필요합니다.\.올바르게 라인 (그리고 그렇지 않습니다 예, 터미네이터의 긴 데이터 라인의 끝을 오해 선). 코드src/bin/psql/토토 커뮤니티.c예제 루틴을 포함합니다 사본 프로토콜을 올바르게 처리합니다.
pqgetLineAnsync
a
Newline-Terminated 문자 라인 (
백엔드 서버) 차단없이 버퍼로.
int pqgetLineAneCync (pgconn *conn, char *버퍼, int bufsize)
이 루틴은와 유사합니다.pqgetline
이지만 사용할 수 있습니다
복사 데이터를 비동기 적으로 읽어야하는 응용 프로그램
차단하지 않고. 사본 명령을 발행하고 Apgres_토토 커뮤니티_out응답,
응용 프로그램은 전화해야합니다pqconsumeInput
andpqgetLineAnync
데이터 종료 신호까지
감지됩니다. 같지 않은pqgetline
,
이 루틴은 데이터 끝을 감지하는 데 책임이 있습니다.
각 호출마다pqgetLineAnync
완전한 Newline- 종료 된 데이터 라인이면 데이터를 반환합니다.
에서 사용할 수 있습니다.libpq's
입력 버퍼 또는 들어오는 데이터 라인이 너무 길어서 맞지 않는 경우
발신자가 제공하는 버퍼에서. 그렇지 않으면 데이터가 없습니다
나머지 줄이 도착할 때까지 돌아 왔습니다.
코피 종료 데이터 마커가있는 경우 루틴은 -1을 반환합니다
데이터를 사용할 수없는 경우 인식되었거나 0, 또는 긍정적 인
반환 된 데이터의 바이트 수를 제공하는 숫자. -1이면
반품, 발신자는 다음 전화해야합니다PQEND토토 커뮤니티
그리고 정상으로 돌아갑니다
처리. 반환 된 데이터는 a를 넘지 않습니다
Newline 캐릭터. 가능하면 전체 라인이 반환됩니다
한 번에. 그러나 발신자가 제공하는 버퍼가
백엔드가 전송 한 줄을 보유하고 부분 데이터를 보유하고 있습니다.
라인이 반환됩니다. 테스트를 통해 감지 할 수 있습니다
마지막으로 반환 된 바이트가\ n반환 된 문자열은 무효가 끝나지 않습니다. (만약 당신이
종료 Null을 추가하고 싶으시면 A를 통과하십시오.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
, 데이터 버퍼에 필요한 경우를 제외하고
보내야 할 바이트 수가
직접 지정됩니다.
PQEND토토 커뮤니티
동기화
백엔드. 이 기능은 백엔드가 가질 때까지 기다립니다
사본을 마쳤습니다. 마지막시기에 발행해야합니다
문자열이를 사용하여 백엔드로 전송되었습니다.pqputline
또는 마지막 문자열이있을 때
사용를 사용하여 백엔드에서받은pggetline
. 발급되거나 백엔드가 있어야합니다
얻을 수 있습니다"out in sync"프론트 엔드. 이 기능에서 돌아 왔을 때 백엔드는 다음과 같습니다
다음 SQL 명령을받을 준비가되었습니다. 반환 값은 0입니다
성공적인 완료시, 그렇지 않으면 0이 아닙니다.
int pqend토토 커뮤니티 (pgconn *conn);
예를 들어 :
pqexec (Conn, "테이블 foo (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_토토 커뮤니티_out실행하여 결과pqgetline
반복적으로PQEND토토 커뮤니티
터미네이터 라인이 보입니다. 그것
그런 다음로 돌아 가야합니다.pqgetresult
루프까지pqgetresult
NULL을 반환합니다. 마찬가지로 Apgres_토토 커뮤니티_in결과는 a
일련의pqputline
전화가 따랐습니다
에 의해PQEND토토 커뮤니티
, 그런 다음으로 돌아갑니다.pqgetresult
루프. 이 배열
에 포함 된 사본 또는 복사 명령이
일련의SQL명령이 있습니다
올바르게 실행.
이전 응용 프로그램은 사본을 제출하거나 복사 할 가능성이 높습니다.
을 통해PQEXEC
트랜잭션은 이후에 이루어집니다.PQEND토토 커뮤니티
. 이것은 경우에만 올바르게 작동합니다
복사/아웃은 유일한 것입니다SQL명령 문자열의 명령.