thePQEXEC
함수는 정상적인 동기 응용 프로그램에서 스포츠 토토 사이트을 제출하기에 적합합니다. 그러나 일부 사용자에게는 중요 할 수있는 몇 가지 결함이 있습니다.
PQEXEC
스포츠 토토 사이트이 완료되기를 기다립니다. 응용 프로그램에는 다른 작업이 수행 될 수 있습니다 (예 : 사용자 인터페이스 유지 보수).이 경우 응답 대기를 차단하고 싶지 않습니다.
클라이언트 응용 프로그램 실행이 결과를 기다리는 동안 정지되므로 응용 프로그램이 진행중인 스포츠 토토 사이트을 취소하려고 시도하기가 어렵습니다. (신호 핸들러에서 수행 할 수는 있지만 그렇지 않으면 수행 할 수 있습니다.)
PQEXEC
하나만 반환 할 수 있습니다pgresult
구조. 제출 된 스포츠 토토 사이트 문자열에 다중가 포함 된 경우SQL스포츠 토토 사이트, 마지막pgresult
PQEXEC
.
PQEXEC
항상 스포츠 토토 사이트의 전체 결과를 수집하여 단일로 완충합니다pgresult
. 이것은 응용 프로그램의 오류 처리 로직을 단순화하지만 많은 행이 포함 된 결과에 비현실적 일 수 있습니다.
이러한 제한이 마음에 들지 않는 응용 프로그램은 대신의 기본 기능을 사용할 수 있습니다.PQEXEC
에서 구축되었습니다 :pqsendquery
및pqgetresult
. 또한pqsendqueryparams
, pqsendprepare
, pqsendqueryprepared
, pqsendDescribreprepared
, pqsenddescribePortal
, PQSENDCLOSEPREPARED
및PQSENDCLOSEPORTAL
pqgetresult
의 기능을 복제하려면pqexecparams
, pqprepare
, pqExecprepared
, PQDESCREPREPARED
, pqdescribePortal
, pqcloseprepared
및PQCLOSEPORTAL
각각.
pqsendquery
#결과를 기다리지 않고 서버에 스포츠 토토 사이트을 제출합니다. 스포츠 토토 사이트이 성공적으로 발송 된 경우 1이 반환되고 그렇지 않은 경우 0 (사용.PQERRORMESSAGE
실패에 대한 자세한 정보를 얻으려면).
int pqsendquery (pgconn *conn, const char *command);
성공적으로 전화 한 후pqsendquery
, Callpqgetresult
결과를 얻기 위해 한 번 이상.pqsendquery
| (동일한 연결에서) 다시 호출 할 수 없습니다pqgetresult
스포츠 토토 사이트이 완료되었음을 나타내는 널 포인터를 반환했습니다.
파이프 라인 모드에서는이 기능이 허용되지 않습니다.
pqsendqueryparams
#결과를 기다리지 않고 서버에 스포츠 토토 사이트과 별도의 매개 변수를 제출합니다.
int pqsendqueryparams (pgconn *conn, const char *명령, int nparams, const oid *paramtypes, const char * const * paramvalues, const int *paramlengths, const int *faramformats, int resultformat);
이것은에 해당합니다.pqsendquery
17971_18107pqexecparams
. 좋다pqexecparams
, 쿼리 문자열에서 하나의 스포츠 토토 사이트 만 허용합니다.
pqsendprepare
#완료를 기다리지 않고 주어진 매개 변수로 준비된 스포츠 토토 사이트문을 작성하라는 요청을 보냅니다.
int pqsendprepare (pgconn *conn, const char *stmtname, const char *쿼리, int nparams, const oid *paramtypes);
이것은 비동기 버전의입니다.pqprepare
: 요청을 파견 할 수있는 경우 1, 그렇지 않은 경우 0이 반환됩니다. 성공적인 전화 후 전화pqgetresult
서버가 준비된 스포츠 토토 사이트문을 성공적으로 작성했는지 여부를 결정합니다. 함수의 매개 변수는 동일하게 처리됩니다.pqprepare
.
pqsendqueryprepared
#결과를 기다리지 않고 주어진 매개 변수로 준비된 스포츠 토토 사이트문을 실행하라는 요청을 보냅니다.
int pqsendqueryprepared (pgconn *conn, const char *stmtname, int nparams, const char * const * paramvalues, const int *paramlengths, const int *faramformats, int resultformat);
이것은와 유사합니다.pqsendqueryparams
, 그러나 실행되는 명령은 쿼리 문자열을 제공하는 대신 이전에 준비된 명령문을 지정하여 지정됩니다. 함수의 매개 변수는 동일하게 처리됩니다.pqExecprepared
.
pqsendDescribreprepared
#완료를 기다리지 않고 지정된 준비된 진술에 대한 정보를 얻으라는 요청을 제출합니다.
int pqsenddescribeprepared (pgconn *conn, const char *stmtname);
이것은 비동기 버전의입니다.PQDESCREPREPARED
: 요청을 파견 할 수있는 경우 1, 그렇지 않은 경우 0이 반환됩니다. 성공적인 전화 후 전화pqgetresult
결과를 얻으려면. 함수의 매개 변수는 동일하게 처리됩니다.PQDESCREPREPARED
.
PQSENDDESCRIPEPORTAL
#완료를 기다리지 않고 지정된 포털에 대한 정보를 얻기위한 요청을 제출합니다.
int pqsenddescribePortal (pgconn *conn, const char *portalname);
이것은 비동기 버전의입니다.pqdescribePortal
: 요청을 파견 할 수있는 경우 1, 그렇지 않은 경우 0이 반환됩니다. 성공적인 전화 후 전화pqgetresult
결과를 얻으려면. 함수의 매개 변수는 동일하게 처리됩니다.pqdescribePortal
.
PQSENDCLOSEPREPARED
#완료를 기다리지 않고 지정된 준비된 진술을 닫으라는 요청을 제출합니다.
int pqsendcloseprepared (pgconn *conn, const char *stmtname);
이것은 비동기 버전의입니다.pqcloseprepared
: 요청을 파견 할 수있는 경우 1, 그렇지 않은 경우 0이 반환됩니다. 성공적인 전화 후 전화pqgetresult
결과를 얻으려면. 함수의 매개 변수는 동일하게 처리됩니다.pqcloseprepared
.
PQSENDCLOSEPORTAL
#완료를 기다리지 않고 지정된 포털을 닫으라는 요청을 제출합니다.
int pqsendcloseportal (pgconn *conn, const char *portalname);
이것은 비동기 버전의입니다.PQCLOSEPORTAL
: 요청을 발송할 수있는 경우 1, 그렇지 않은 경우 0이 반환됩니다. 성공적인 전화 후 전화pqgetresult
결과를 얻으려면. 함수의 매개 변수는 동일하게 처리됩니다.PQCLOSEPORTAL
.
pqgetresult
#사전에서 다음 결과를 기다립니다pqsendquery
, pqsendqueryparams
, pqsendprepare
, pqsendqueryprepared
, pqsendDescribreprepared
, PQSENDDESCRIPEPORTAL
, PQSENDCLOSEPREPARED
, PQSENDCLOSEPORTAL
, PQSENDPIPELINESYNC
또는PQPIPELINESYNC
전화를 걸어 반환합니다. 스포츠 토토 사이트이 완료되면 널 포인터가 반환되고 더 이상 결과가 없습니다.
pgresult *pqgetresult (pgconn *conn);
pqgetresult
스포츠 토토 사이트이 완료되었음을 나타내는 널 포인터를 반환 할 때까지 반복적으로 호출해야합니다. (스포츠 토토 사이트이 활성화되지 않은 경우 호출되면pqgetresult
한 번에 널 포인터를 반환합니다.) 각각의 비 널은의 결과입니다.pqgetresult
동일한 것을 사용하여 처리해야합니다pgresult
앞에서 설명한 액세서 기능. 로 각 결과 객체를 자유롭게하는 것을 잊지 마십시오.PQCLEAR
완료되면. 참고pqgetresult
스포츠 토토 사이트이 활성화되어 있고 필요한 응답 데이터가 아직 읽지 않은 경우에만 차단됩니다pqconsumeInput
.
파이프 라인 모드에서pqgetresult
오류가 발생하지 않는 한 정상적으로 반환됩니다. 다음 동기화 지점까지 오류를 일으킨 후에 전송 된 후속 쿼리의 경우, 다음 동기화 지점까지 (유형의 특별한 결과)pgres_pipeline_aborted
가 반환되고 널 포인터가 반환됩니다. 파이프 라인 동기화 지점에 도달하면 유형의 결과pgres_pipeline_sync
반환됩니다. 동기화 지점 후 다음 쿼리의 결과는 즉시 뒤 따릅니다 (즉, 동기화 지점 후에는 널 포인터가 반환되지 않습니다)..
때에도pqresultstatus
치명적인 오류를 나타냅니다.pqgetresult
허용하기 위해 널 포인터를 반환 할 때까지 호출해야합니다libpq오류 정보를 완전히 처리하려면
사용pqsendquery
andpqgetresult
를 해결합니다PQEXEC
의 문제 : 스포츠 토토 사이트 문자열에 다중 포함 된 경우SQL스포츠 토토 사이트, 해당 스포츠 토토 사이트의 결과는 개별적으로 얻을 수 있습니다. (이렇게하면 간단한 형태의 중첩 처리가 가능합니다. 그건 그렇고, 클라이언트는 서버가 동일한 스포츠 토토 사이트 문자열에서 나중에 쿼리에서 여전히 작동하는 동안 하나의 스포츠 토토 사이트의 결과를 처리 할 수 있습니다.).
|pqsendquery
andpqgetresult
큰 쿼리 결과를 검색하고 있습니다. 이것은에서 논의됩니다.PostgreSQL : 문서 : 개발 : 32.6. 스포츠 토토 사이트 검색 결과 chunks.
그 자체로 전화pqgetresult
서버가 다음을 완료 할 때까지 클라이언트가 여전히 차단하게됩니다SQL명령. 두 가지 기능을 올바르게 사용하여 피할 수 있습니다.
pqconsumeInput
#서버에서 입력을 사용할 수 있으면 소비하십시오.
int pqconsumeInput (pgconn *conn);
pqconsumeInput
일반적으로 반환 1 표시“오류 없음”, 그러나 어떤 종류의 문제가 있으면 0을 반환합니다 (어떤 경우PQERRORMESSAGE
참조 할 수 있습니다). 결과는 입력 데이터가 실제로 수집되었는지 여부를 말하지 않습니다. 전화 후pqconsumeInput
, 응용 프로그램이 확인할 수 있습니다PQISBUSY
및/또는pqnotifies
상태가 바뀌 었는지 확인하려면
pqconsumeInput
응용 프로그램이 아직 결과 나 알림을 처리 할 준비가되지 않은 경우에도 호출 할 수 있습니다. 함수는 사용 가능한 데이터를 읽고 버퍼에 저장하여 A를 유발합니다.select ()
사라질 준비가 된 표시. 따라서 응용 프로그램은 사용할 수 있습니다pqconsumeInput
select ()
즉시 조건을 한 다음 여가에서 결과를 검사하십시오.
PQISBUSY
#스포츠 토토 사이트이 바쁜 경우 1, 즉 반환 1pqgetresult
입력 대기 대기 블록. 0 반환은를 나타냅니다.pqgetresult
차단되지 않는다는 확신으로 호출 할 수 있습니다.
int pqisbusy (pgconn *conn);
PQISBUSY
서버에서 데이터를 읽으려고 시도하지 않습니다. 그러므로pqconsumeInput
먼저 호출되어야합니다. 그렇지 않으면 바쁜 상태가 끝나지 않을 것입니다.
이러한 함수를 사용하는 일반적인 응용 프로그램은 사용하는 기본 루프가 있습니다select ()
또는poll ()
응답해야 할 모든 조건을 기다리려면. 조건 중 하나는 서버에서 사용할 수있는 입력이며select ()
|pqsocket
. 기본 루프가 입력 준비를 감지하면 호출해야합니다pqconsumeInput
입력을 읽으려면. 그런 다음 호출 할 수 있습니다PQISBUSY
그 뒤에pqgetresult
ifPQISBUSY
거짓 (0)을 반환합니다. 또한 전화 할 수 있습니다pqnotifies
감지하려면Notify
메시지 (참조PostgreSQL : 문서 : 개발 : 32.9. 비동기 롤 토토).
사용하는 클라이언트pqsendquery
/pqgetresult
서버에서 여전히 처리중인 스포츠 토토 사이트을 취소하려고 시도 할 수도 있습니다. 보다PostgreSQL : 문서 : 개발 : 32.7. 진행중인 쿼리 토토 결과. 그러나 반환 값에 관계없이pqcancelblocking
, 응용 프로그램은를 사용하여 일반 결과 읽기 순서를 계속 유지해야합니다.pqgetresult
. 성공적인 취소는 단순히 스포츠 토토 사이트이 다른 것보다 빨리 종료 될 것입니다..
위에서 설명한 함수를 사용하여 데이터베이스 서버에서 입력을 기다리는 동안 차단을 피할 수 있습니다. 그러나 응용 프로그램이 출력을 서버로 전송하기 위해 대기 대기를 차단할 수 있습니다. 이것은 비교적 드물지만 매우 긴 SQL 명령 또는 데이터 값이 전송되면 발생할 수 있습니다. (응용 프로그램이를 통해 데이터를 전송하는 경우 훨씬 더 가능성이 높습니다복사
.
pqsetnonBlocking
#연결의 비 차단 상태를 설정합니다.
int pqsetnonblocking (pgconn *conn, int arg);
비 블로킹에 연결 상태를 설정합니다. ifarg
IS 1 또는 if 차단arg
는 0입니다. OK 인 경우 0, 오류 인 경우 -1을 반환합니다.
비 차단 상태에서 성공적인 전화pqsendquery
, pqputline
, PQPUTNBYTES
, pqputcopydata
및PQENDCOPY
차단하지 않을 것입니다. 그들의 변경은 플러시 될 때까지 로컬 출력 버퍼에 저장됩니다. 실패한 통화가 오류를 반환하고 retried를 반환해야합니다.
참고PQEXEC
비 차단 모드를 존중하지 않습니다. 그것이 부름을 받으면 어쨌든 패션을 차단하는 데 행동 할 것입니다.
pqisnonBlocking
#데이터베이스 연결의 차단 상태를 반환합니다.
int pqisnonblocking (const pgconn *conn);
연결이 차단 모드로 설정된 경우 1이고 차단하면 0을 반환합니다.
pqflush
#대기열 출력 데이터를 서버로 플러시하려고 시도합니다. 성공한 경우 (또는 전송 큐가 비어있는 경우), 어떤 이유로 실패한 경우 -1 또는 1 또는 1이 전송 큐에서 모든 데이터를 전송할 수없는 경우 1을 반환합니다 (이 경우 연결이 차단되지 않은 경우에만 발생할 수 있음)..
int pqflush (pgconn *conn);
비 차단 연결에 스포츠 토토 사이트이나 데이터를 보내고 나면 hallpqflush
. 1이 반환되면 소켓이 읽거나 쓰기 준비가 될 때까지 기다립니다. 쓰기 준비가되면 전화pqflush
다시. 읽기 준비가되면 전화pqconsumeInput
, 전화pqflush
다시. 까지 반복pqflush
반환 0. (읽기 준비를 확인하고 입력을 배출해야합니다pqconsumeInput
, 서버가 우리에게 데이터를 보내려고 시도 할 수 있기 때문에, 예를 들어, 통지 메시지를 보내고, 읽을 때까지 데이터를 읽지 않기 때문입니다.)pqflush
0을 반환하고 소켓을 읽을 때까지 기다린 다음 위에서 설명한대로 응답을 읽습니다.