Postgresql 9.2.24 문서 | ||||
---|---|---|---|---|
스포츠 토토 베트맨 PostgreSQL : 문서 : 9.2 : 명령 실행 함수 | up | 31 장.libpq-C 라이브러리 | 다음 |
thePQEXEC
함수는 적절합니다
정상적인 동기 응용 프로그램에서 무지개 토토을 제출합니다. 그것
그러나 몇 가지 결함이 있지만
일부 사용자 :
PQEXEC
무지개 토토을 기다립니다
완료됩니다. 응용 프로그램은 다른 작업을 수행 할 수 있습니다
(예 : 사용자 인터페이스 유지 관리), 즉
응답 대기를 차단하고 싶지 않을 것입니다.
클라이언트 응용 프로그램 실행이 중단되기 때문에 결과를 기다리는 동안 응용 프로그램은 어렵습니다. 진행중인 취소를 시도하기로 결정합니다. 무지개 토토. (신호 핸들러에서 수행 할 수는 있지만 그렇지 않으면.)
PQEXEC
하나만 반환 할 수 있습니다pgresult구조. 만약
제출 된 무지개 토토 문자열은 여러SQL무지개 토토, 마지막pgresultPQEXEC
.
PQEXEC
항상 수집합니다
무지개 토토의 전체 결과, 단일로 버퍼링pgresult. 이것은 단순화되는 동안
응용 프로그램의 오류 처리 로직
많은 행이 포함 된 결과에 비현실적입니다.
이러한 제한을 좋아하지 않는 응용 프로그램은 대신 할 수 있습니다
의 기본 기능을 사용하십시오.PQEXEC
에서 구축되었습니다 :pqsendquery
andpqgetresult
. 또한pqsendqueryparams
, pqsendprepare
, pqsendqueryprepared
, pqsendDescribreprepared
및pqsenddescribePortal
pqgetresult
의 기능성pqexecparams
,
pqprepare
, pqExecprepared
, PQDESCREPREPARED
및pqdescribePortal
각각.
pqsendquery
기다리지 않고 서버에 무지개 토토을 제출합니다.
결과). 무지개 토토이 성공적으로 있으면 1이 반환됩니다
파견 된 경우 0이 아닌 경우 (어떤 경우 사용PQERRORMESSAGE
더 많은 정보를 얻으려면
실패에 대해).
int pqsendquery (pgconn *conn, const char *command);
성공적으로 전화 한 후pqsendquery
, Callpqgetresult
얻을 수있는 한 번 이상
결과.pqsendquery
(동일한 연결에서) 다시 호출 할 수 없습니다pqgetresult
a
널 포인터, 무지개 토토이 완료되었음을 나타냅니다.
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
15299_15459pqexecparams
. 좋다pqexecparams
, 그렇지 않을 것입니다
2.0 protocol 연결에서 작업하면 하나만 허용합니다
쿼리 문자열의 무지개 토토.
pqsendprepare
완료를 기다리지 않고 매개 변수가 주어진다.
int pqsendprepare (pgconn *conn, const char *stmtname, const char *쿼리, int nparams, const oid *paramtypes);
이것은 비동기 버전의입니다.pqprepare
: 가능하면 1을 반환합니다
요청을 발송하고 그렇지 않은 경우 0. 성공 후
전화, 전화pqgetresult
TO
서버가 성공적으로 생성했는지 여부를 결정하십시오
준비된 진술. 함수의 매개 변수가 처리됩니다
동일하게pqprepare
.
좋다pqprepare
, 그렇지 않습니다
2.0 protocol 연결 작업.
pqsendqueryprepared
준비한 문을 실행하라는 요청을 보냅니다 결과를 기다리지 않고 매개 변수가 주어진 매개 변수.
int pqsendqueryprepared (pgconn *conn, const char *stmtname, int nparams, const char * const * paramvalues, const int *paramlengths, const int *faramformats, int resultformat);
이것은와 유사합니다.pqsendqueryparams
, 그러나 명령
실행 된 것은 이전에 준비된 준비를하여 지정됩니다
쿼리 문자열을 제공하는 대신 진술. 기능
매개 변수는 동일하게 처리됩니다pqExecprepared
. 좋다pqExecprepared
, 작동하지 않습니다
2.0 protocol 연결.
17999_18023
에 대한 정보를 얻기위한 요청을 제출합니다 대기하지 않고 지정된 준비된 진술 완성.
int pqsenddescribeprepared (pgconn *conn, const char *stmtname);
이것은 비동기 버전의입니다.PQDESCREPREPARED
: 1이면 1을 반환합니다
요청을 파견 할 수 있었고, 그렇지 않은 경우 0. 후
성공적인 전화, 전화pqgetresult
결과를 얻으려면. 그만큼
함수의 매개 변수는 동일하게 처리됩니다.PQDESCREPREPARED
. 좋다PQDESCREPREPARED
2.0 protocol 연결에서 작동하지 않습니다.
pqsenddescribePortal
에 대한 정보를 얻기위한 요청을 제출합니다 완료를 기다리지 않고 지정된 포털.
int pqsenddescribePortal (pgconn *conn, const char *portalname);
이것은 비동기 버전의입니다.pqdescribePortal
: 그렇다면 1이 반환됩니다
요청을 파견 할 수 있고 그렇지 않은 경우 0. 후
성공적인 전화, 전화pqgetresult
결과를 얻으려면. 그만큼
함수의 매개 변수는 동일하게 처리됩니다.pqdescribePortal
. 좋다pqdescribePortal
, 그렇지 않을 것입니다
2.0 protocol 연결 작업.
pqgetresult
사전에서 다음 결과를 기다립니다pqsendquery
, pqsendqueryparams
, pqsendprepare
, pqsendqueryprepared
, pqsenddescribeprepared
또는pqsenddescribePortal
전화를 걸어 반환합니다
그것. 무지개 토토이 완료되면 널 포인터가 반환됩니다.
그리고 더 이상 결과가 없을 것입니다.
pgresult *pqgetresult (pgconn *conn);
pqgetresult
호출해야합니다
널 포인터를 반환 할 때까지 반복해서 나타냅니다
무지개 토토이 완료되었습니다. (무지개 토토이 활성화되지 않은 경우 호출되면pqgetresult
그냥 돌아올 것입니다
한 번에 null 포인터.) 각각의 비 널은에서 비롯됩니다.pqgetresult
동일한 것을 사용하여 처리pgresult액세서 기능 이전
설명. 로 각 결과 객체를 자유롭게하는 것을 잊지 마십시오.PQCLEAR
완료되면.
참고pqgetresult
의지
무지개 토토이 활성화되어 있고 필요한 경우에만 차단
응답 데이터는 아직 읽지 않았습니다.pqconsumeInput
.
참고 :때도
pqresultstatus
치명적인 것을 나타냅니다 오류,pqgetresult
허용하기 위해 널 포인터를 반환 할 때까지 호출됩니다libpq처리하려면 오류 정보는 완전히 완전히.
사용pqsendquery
andpqgetresult
를 해결합니다PQEXEC
의 문제 : 무지개 토토 인 경우
문자열에는 여러 가지가 포함SQL무지개 토토, 해당 무지개 토토의 결과를 얻을 수 있습니다
개별적으로. (이것은 간단한 형태의 겹침을 허용합니다
그건 그렇고, 처리 : 클라이언트는 결과를 처리 할 수 있습니다.
서버가 여전히 나중에 쿼리에서 작동하는 동안 하나의 무지개 토토
같은 무지개 토토 문자열.)
pqsendquery
andpqgetresult
큰 쿼리 결과를 검색하고 있습니다
한 번에 행. 이것은에서 논의됩니다.섹션 31.5.
그 자체로 전화pqgetresult
서버가 완료 될 때까지 클라이언트가 여전히 차단됩니다.
다음SQL명령. 이것은 할 수 있습니다
두 가지 기능을 올바르게 사용하여 피해야합니다.
pqconsumeInput
서버에서 입력을 사용할 수 있으면 소비하십시오.
int pqconsumeInput (pgconn *conn);
pqconsumeInput
일반적으로
반환 1 표시"오류 없음",
그러나 어떤 종류의 문제가 있으면 0을 반환합니다 (
사례PQERRORMESSAGE
할 수 있습니다
상담). 결과는 어떤지 여부를 말하지 않습니다
입력 데이터가 실제로 수집되었습니다. 전화 후pqconsumeInput
,
응용 프로그램이 확인할 수 있습니다PQISBUSY
및/또는pqnotifies
주 상태가 있는지 확인합니다
변경.
pqconsumeInput
할 수 있습니다
응용 프로그램이 처리 할 준비가되지 않은 경우에도 호출
아직 결과 또는 알림. 함수가 읽습니다
사용 가능한 데이터 및 버퍼에 저장하여 A를 유발합니다.select ()
읽기 준비
사라지는 징후. 따라서 응용 프로그램은 사용할 수 있습니다pqconsumeInput
select ()
조건
즉시, 여가에서 결과를 조사하십시오.
PQISBUSY
무지개 토토이 바쁘면 1을 반환합니다. 즉,pqgetresult
대기를 막을 것입니다
입력. 0 반환은를 나타냅니다.pqgetresult
보증으로 호출 할 수 있습니다
차단되지 않음.
int pqisbusy (pgconn *conn);
PQISBUSY
그 자체가 아닙니다
서버에서 데이터를 읽으려고 시도합니다. 그러므로pqconsumeInput
먼저 호출되거나 바쁜 상태는 결코 끝나지 않을 것입니다.
이 함수를 사용하는 일반적인 응용 프로그램은 주된 것입니다.
사용하는 루프select ()
또는poll ()
모든 것을 기다리려면
응답 해야하는 조건. 조건 중 하나가 될 것입니다
서버에서 사용할 수있는 입력은select ()
파일에서 읽을 수있는 데이터를 의미합니다
에 의해 식별 된 설명 자pqsocket
.
기본 루프가 입력 준비를 감지하면 호출해야합니다pqconsumeInput
입력을 읽으려면.
그런 다음 호출 할 수 있습니다PQISBUSY
에 의해pqgetresult
ifPQISBUSY
거짓 (0)을 반환합니다. 또한 전화 할 수 있습니다pqnotifies
감지하려면Notify메시지 (참조섹션 31.8).
사용하는 클라이언트pqsendquery
/pqgetresult
a
서버에서 여전히 처리중인 무지개 토토; 보다섹션 31.6. 그러나
반환 값pqcancel
,
응용 프로그램은 정상 결과 읽기 순서를 계속해야합니다
사용pqgetresult
. 성공
취소는 단순히 무지개 토토이 더 빨리 끝나게합니다
그렇지 않은 것보다.
위에서 설명한 함수를 사용하여 데이터베이스 서버에서 입력을 기다리는 동안 차단을 피하십시오. 그러나 응용 프로그램이 차단 될 가능성이 여전히 남아 있습니다. 서버로 출력을 보내기를 기다립니다. 이것은 비교적 드문 일입니다 매우 긴 SQL 명령 또는 데이터 값이 전송되면 발생할 수 있습니다. (응용 프로그램이를 통해 데이터를 전송하는 경우 훨씬 더 가능성이 높습니다복사,) 가능성과 완전히 비 차단 데이터베이스를 달성합니다 작동, 다음 추가 기능을 사용할 수 있습니다.
pqsetnonblocking
연결의 비 차단 상태를 설정합니다.
int pqsetnonblocking (pgconn *conn, int arg);
if 비 블로킹에 연결 상태를 설정합니다.argIS 1 또는 if 차단arg는 0입니다. OK 인 경우 0, -1 if를 반환합니다 오류.
비 차단 상태에서 전화pqsendquery
, pqputline
, pqputnbytes
및PQENDCOPY
대신 차단되지 않고 대신
다시 호출 해야하는 경우 오류를 반환합니다.
참고PQEXEC
그렇지 않습니다
비 차단 모드를 존중하십시오. 그것이 호출되면, 그것은 행동합니다
어쨌든 패션 차단.
PqisnonBlocking
데이터베이스의 차단 상태를 반환합니다 연결.
int pqisnonblocking (const pgconn *conn);
연결이 비 차단 모드로 설정된 경우 1 그리고 차단하면 0.
pqflush
대기열 출력 데이터를 서버로 플러시하려고 시도합니다. 성공한 경우 0을 반환합니다 (또는 보내기 큐가 비어있는 경우), -1 어떤 이유로 실패한 경우, 또는 보낼 수없는 경우 1 Send 큐의 모든 데이터는 아직 연결이 차단되지 않은 경우 발생합니다).
int pqflush (pgconn *conn);
블로킹되지 않은 연결에 무지개 토토이나 데이터를 전송 한 후
부르다pqflush
. 1이 반환되면 기다리십시오
소켓이 읽기 또는 쓰기 준비가되기 위해. 그것이되면
쓰기 준비, 전화pqflush
다시. 만약에
읽기 준비가되어 콜pqconsumeInput
, 전화pqflush
다시. 까지 반복pqflush
반환 0. (확인해야합니다
읽기 준비가되고 입력을 배수하려면pqconsumeInput
, 서버가 차단할 수 있기 때문에
우리에게 데이터를 보내려고 (예 : 통지 메시지, 우리를 읽지 않을 것입니다
우리가 읽을 때까지 데이터.) 한 번pqflush
0을 반환하고 소켓이 될 때까지 기다립니다
읽은 다음 위에서 설명한대로 응답을 읽으십시오.