복사 토토 꽁 머니Postgres|libpq. 따라서 기능이 필요합니다 이 네트워크 연결에 직접 액세스하려면 응용 프로그램이 사용될 수 있습니다. 이 기능의 장점.
이러한 기능은 a pgres_copy_out 또는 pgres_copy_in 결과 객체에서 pqexec 또는 pqgetresult.
pqgetlinea Newline-Terminated 문자 라인 ( 백엔드 서버) 크기 길이의 버퍼 문자열로.
int pqgetline (pgconn *conn, char *string, int 길이)FGETS (3)처럼,이 일상적인 문자는 최대 1 자까지 복사합니다 문자열로. 그러나 Gets (3)과 같습니다. Newline을 널 캐릭터로 종료합니다. pqgetline은 eof를 반환합니다 EOF, 0 전체 라인을 읽은 경우 0, 버퍼가있는 경우 1 완전하지만 종료 Newline은 아직 읽지 않았습니다. 주목하십시오 신청서는 새 라인이 두 가지로 구성되어 있는지 확인해야합니다. 문자 "\."는 백엔드 서버에 사본 명령의 결과를 완료했습니다. 만약 응용 프로그램은 길이 1 이상의 줄을받을 수 있습니다 캐릭터는 길고 "\"를 인식하는 데주의를 기울여야합니다. 올바르게 라인 (예를 들어, 끝을 오해하지 않습니다. 터미네이터 라인의 긴 데이터 라인). 코드../ src/bin/psql/psql.c루틴을 포함합니다 복사 프로토콜을 올바르게 처리합니다.
pqgetlineAnync읽기 a Newline-Terminated 문자 라인 ( 백엔드 서버) 차단없이 버퍼로.
int pqgetlineAneCync (pgconn *conn, char *버퍼, int bufsize)이 루틴은 pqgetline과 유사하지만 사용할 수 있습니다. 복사 데이터를 비동기 적으로 읽어야하는 응용 프로그램 차단하지 않고. 사본 명령을 발행하고 a pgres_copy_out 응답, 응용 프로그램은 pqconsumeInput을 호출해야합니다 및 데이터 종료 신호가 감지 될 때까지 pqgetLineAnecync. 같지 않은 pqgetline,이 일상은 감지에 책임이 있습니다 데이터 끝. 각 호출마다 pqgetLineAneCync는 a 완전한 Newline-Perminated Data Line은 LIBPQ에서 사용할 수 있습니다 입력 버퍼 또는 들어오는 데이터 라인이 너무 길어서 발신자가 제공하는 버퍼. 그렇지 않으면 데이터가 반환되지 않습니다 나머지 줄이 도착할 때까지. 일상은 -1을 반환합니다 카피 종료 데이터 마커가 인식되었거나 데이터가없는 경우 0 사용 가능한 양수 또는 데이터의 바이트 수를 제공하는 양수 반환. -1이 반환되면 발신자는 다음에 pqendcopy를 호출해야합니다. 그런 다음 정상 처리로 돌아갑니다. 반환 된 데이터는 그렇지 않습니다 Newline 캐릭터를 넘어 확장하십시오. 가능하면 전체 라인이있을 것입니다 한 번에 돌아 왔습니다. 그러나 발신자가 제공하는 버퍼가 있다면 백엔드가 전송하기에는 너무 작아서 부분 데이터 라인이 반환됩니다. 이것은 무엇인지 테스트하여 감지 할 수 있습니다 마지막으로 반환 된 바이트는 '\ n'이든 아니든. 반환 된 문자열은 아닙니다 널리 터진. (종료 null을 추가하려면 실제로 사용 가능한 방보다 작은 Bufsize를 통과하십시오.)
pqputline무효가 종결된다 백엔드 서버에 문자열. 확인이 없으면 0을 반환합니다 문자열 보내기.
int pqputline (pgconn *conn, char *string);참고 응용 프로그램은 두 문자를 명시 적으로 보내야합니다 "\." 백엔드를 나타내는 최종 라인에서 데이터 보내기 완료.
pqputnbytes보내기 a 백엔드 서버에 대한 널없는 문자열. IF가 0을 반환합니다 좋아요, 문자열을 보낼 수없는 경우.
int pqputnbytes (pgconn *conn, const char *버퍼, int nbytes);이것은 데이터 버퍼를 제외하고는 PQPUTLINE와 똑같습니다. 보내야 할 바이트 수가 IS이므로 무효화 할 필요는 없습니다. 직접 지정됩니다.
PQENDCOPY백엔드와 동기화됩니다. 이 기능은 백엔드가 사본을 마칠 때까지 기다립니다. 그것 마지막 문자열이 전송 될 때 발행해야합니다. pqputline을 사용한 백엔드 또는 마지막 문자열이 pggetline을 사용하여 백엔드에서 수신했습니다. 발행해야합니다 백엔드는 프론트 엔드와 "동기화"를 얻을 수 있습니다. 에 이 기능에서 반환하면 백엔드는 다음 쿼리. 성공적인 완료시 반환 값은 0입니다. 그렇지 않으면 0이 아닌 것입니다.
int pqendcopy (pgconn *conn);
예를 들어 :
pqexec (conn, "테이블 foo (in int4, b char (16), d float8)); 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가 null을 반환 할 때까지 pqgetresult 루프로 돌아갑니다. 마찬가지로 pgres_copy_in 결과는 일련의 일련 pqputline 호출 후 pqendcopy가 그 다음으로 돌아갑니다 pqgetresult 루프. 이 계약은 OR의 사본을 보장합니다 일련의 SQL 명령에 내장 된 복사 토토 꽁 머니은 다음과 같습니다. 올바르게 실행되었습니다. 이전 응용 프로그램은 사본을 제출할 가능성이 높습니다 PQEXEC를 통해 또는 복사하여 거래가 완료되었다고 가정합니다. pqendcopy 후. 사본이/아웃 인 경우에만 올바르게 작동합니다 쿼리 문자열의 유일한 SQL 명령입니다.