32.7. 진행중인 쿼리 배트맨 토토#

32.7.1. 배트맨 토토 요청을 보내는 기능#

pqcancelcreate #

배트맨 토토 요청을 보낼 수있는 연결을 준비합니다.

pgcancelconn *pqcancelcreate (pgconn *conn);

pqcancelcreatea 생성pgcancelconn개체이지만이 연결에 대한 배트맨 토토 요청을 즉시 보내지는 않습니다. 배트맨 토토 요청은이 연결을 통해를 사용하여 차단 방식으로 보낼 수 있습니다.pqcancelblocking그리고 사용하지 않는 방식으로pqcancelstart. 반환 값을 전달할 수 있습니다pqcancelstatus확인하려면pgcancelconn객체가 성공적으로 생성되었습니다. 그만큼pgcancelconn객체는 응용 프로그램에서 직접 액세스 할 수없는 불투명 구조입니다. 이것pgcancelconn객체를 사용하여 원래 연결에서 실행중인 쿼리를 스레드 안전 방식으로 배트맨 토토 할 수 있습니다.

배트맨 토토 요청에 대한 연결을 설정할 때 원래 클라이언트의 많은 연결 매개 변수가 재사용됩니다. 중요한 것은 원래 연결에 연결의 암호화 및/또는 대상 호스트의 검증이 필요한 경우 (사용sslmode또는gssencmode), 그런 다음 취소 요청에 대한 연결은 동일한 요구 사항으로 이루어집니다. 취소 요청은 인증이 필요하지 않고 취소 요청이 제출 된 직후에 연결이 닫히기 때문에 인증 중 또는 인증 후에 만 사용되는 모든 연결 옵션은 무시됩니다..

pqcancelcreate널이 아닌 포인터를 반환하면 전화해야합니다pqcancelfinish완료되면 구조와 관련 메모리 블록을 처리하기 위해. 배트맨 토토 요청이 실패했거나 포기 된 경우에도 수행해야합니다.

pqcancelblocking #

서버가 현재 명령 처리를 차단 방식으로 포기하도록 요청합니다.

int pqcancelblocking (pgcancelconn *cancelConn);

요청은 주어진 것에 대해 이루어집니다pgcancelconnpqcancelcreate. 의 반환 값pqcancelblocking배트맨 토토 요청이 성공적으로 발송 된 경우 1이고 그렇지 않은 경우 0입니다. 실패한 경우를 사용하여 오류 메시지를 검색 할 수 있습니다.pqcancelerRormessage .

배트맨 토토의 성공적인 파견은 요청에 어떤 영향을 미칠 것이라고 보장하지는 않습니다. 배트맨 토토가 효과적이면 배트맨 토토 된 명령이 조기에 종료되고 오류 결과를 반환합니다. 배트맨 토토가 실패하면 (예 : 서버가 이미 명령 처리를 수행했기 때문에) 눈에 띄는 결과는 전혀 없습니다.

pqcancelstart
pqcancelpoll #

서버가 비 블로킹 방식으로 현재 명령 처리를 포기하도록 요청합니다.

int pqcancelstart (pgcancelconn *cancelConn);

postgrespollingstatustype pqcancelpoll (pgcancelconn *cancelConn);

요청은 주어진 것에 대해 이루어집니다pgcancelconnpqcancelcreate. 의 반환 값pqcancelstart배트맨 토토 요청이 시작될 수있는 경우 1이고 그렇지 않은 경우 0입니다. 실패한 경우를 사용하여 오류 메시지를 검색 할 수 있습니다.pqcancelerRormessage .

ifpqcancelstart성공, 다음 단계는 투표하는 것입니다libpq배트맨 토토 연결 시퀀스를 진행할 수 있도록. 사용pqcancelsocket데이터베이스 연결 기본 소켓의 설명자를 얻으려면. (주의 : 소켓이 동일하게 남아 있다고 가정하지 마십시오pqcancelpoll전화.) 루프 : ifpqcancelpoll (cancelConn)마지막 반품pgres_polling_reading, 소켓이 읽을 준비가 될 때까지 기다리십시오 (select (), poll ()또는 유사한 시스템 기능). 그런 다음 호출pqcancelpoll (cancelConn)다시. 반대로, ifpqcancelpoll (cancelConn)마지막 반품pgres_polling_writing, 소켓이 쓸 준비가 될 때까지 기다린 다음 전화pqcancelpoll (cancelConn)다시. 첫 번째 반복에서, 즉 아직 전화하지 않은 경우pqcancelpoll (cancelConn), 마지막으로 반환 된 것처럼 행동pgres_polling_writing. 이 루프를 계속할 때까지pqcancelpoll (cancelConn)반환pgres_polling_failed, 연결 절차가 실패했음을 나타내거나pgres_polling_ok, 배트맨 토토 요청이 성공적으로 발송되었음을 나타냅니다.

취소의 성공적인 파견은 요청에 어떤 영향을 미칠 것이라고 보장하지 않습니다. 취소가 효과적이면 취소 된 명령이 조기에 종료되고 오류 결과를 반환합니다. 취소가 실패하면 (예 : 서버가 이미 명령 처리를 수행했기 때문에) 눈에 띄는 결과는 전혀 없습니다.

연결하는 동안 언제든지 연결 상태를 호출하여 확인할 수 있습니다pqcancelstatus. 이 호출이 반환되는 경우Connection_Bad, 그런 다음 취소 절차가 실패했습니다. 통화가 반환되는 경우Connection_ok, 취소 요청이 성공적으로 발송되었습니다. 이 두 상태는의 반환 값에서 똑같이 감지 할 수 있습니다.pqcancelpoll, 위에서 설명합니다. 다른 상태는 또한 비동기 연결 절차 중에 발생할 수 있습니다. 이는 연결 절차의 현재 단계를 나타내며 예를 들어 사용자에게 피드백을 제공하는 데 유용 할 수 있습니다. 이 상태는 다음과 같습니다.

Connection_Allocated #

전화를 기다리는 중pqcancelstart또는pqcancelblocking, 실제로 소켓을 엽니 다. 이것은 호출 직후 연결 상태입니다pqcancelcreate또는pqcancelreset. 이 시점에서 서버에 대한 연결은 아직 시작되지 않았습니다. 실제로 배트맨 토토 요청 사용을 시작하려면pqcancelstart또는pqcancelblocking.

Connection_started #

연결이 이루어지기를 기다리고 있습니다.

Connection_Made #

연결 확인; 보내기를 기다리고 있습니다.

Connection_awaiting_Response #

서버에서 응답을 기다리고 있습니다.

Connection_SSL_STARTUP #

SSL 암호화 협상.

Connection_gss_startup #

GSS 암호화 협상.

이러한 상수는 비록 (호환성을 유지하기 위해) 유지되지만, 응용 프로그램은 특정 순서 또는 전혀, 또는 상태가 항상 문서화 된 값 중 하나 인 상태에 의존해서는 안됩니다. 응용 프로그램은 다음과 같은 일을 할 수 있습니다.

스위치 (pqcancelstatus (conn))

        Case Connection_Started :
            피드백 = "연결 ...";
            부서지다;

        Case Connection_Made :
            피드백 = "서버에 연결되어 ...";
            부서지다;
.
.
.
        기본:
            피드백 = "연결 ...";

theConnect_Timeout사용할 때 연결 매개 변수가 무시됩니다pqcancelpoll; 과도한 시간이 경과했는지 여부를 결정하는 것은 응용 프로그램의 책임입니다. 그렇지 않으면,pqcancelstart뒤 따르는pqcancelpoll루프는에 해당합니다.pqcancelblocking.

pqcancelstatus #

취소 상태를 반환합니다.

Connstatustype pqcancelstatus (const pgcancelconn *cancelConn);

상태는 여러 값 중 하나 일 수 있습니다. 그러나이 중 3 개만이 비동기식 배트맨 토토 절차 외부에서 볼 수 있습니다.Connection_Allocated, Connection_okConnection_Bad. a의 초기 상태pgcancelconn사용을 사용하여 성공적으로 만들어졌습니다pqcancelcreateisConnection_Allocated. 성공적으로 발송 된 배트맨 토토 요청은 상태가 있습니다Connection_ok. 실패한 배트맨 토토 시도는 상태에 따라 신호를받습니다Connection_Bad. OK 상태는 그대로 유지됩니다pqcancelfinish또는pqcancelreset호출.

입력 참조pqcancelstart반환 될 수있는 다른 상태 코드와 관련하여.

취소의 성공적인 파견은 요청에 어떤 영향을 미칠 것이라고 보장하지 않습니다. 취소가 효과적이면 취소 된 명령이 조기에 종료되고 오류 결과를 반환합니다. 취소가 실패하면 (예 : 서버가 이미 명령 처리를 수행했기 때문에) 눈에 띄는 결과는 전혀 없습니다.

pqcancelsocket #

서버에 대한 CANCEL 연결 소켓의 파일 디스크립터 번호를 얻습니다.

int pqcancelsocket (const pgcancelconn *cancelConn);

유효한 설명자가 0보다 크거나 동일합니다. -1의 결과는 현재 서버 연결이 열리지 않음을 나타냅니다. 이것은이 섹션의 기능을 호출 한 결과로 변경 될 수 있습니다.pgcancelconn(제외pqcancelerRormessageandpqcancelsocket자체).

pqcancelerRormessage #

취소에서 작업에서 가장 최근에 생성 된 오류 메시지를 반환합니다.

char *pqcancelerrormessage (const pgcancelconn *cancelConn);

거의 모든libpqa 기능pgcancelconn메시지를 설정합니다pqcancelerRormessage실패하면.libpq컨벤션, 비어 없음pqcancelerRormessage결과는 여러 줄로 구성 될 수 있으며 후행 Newline이 포함됩니다. 발신자는 결과를 직접 자유롭게 해제해서는 안됩니다. 관련이 해방 될 것입니다pgcancelconn핸들이 전달됩니다pqcancelfinish. 결과 문자열은의 작업에서 동일하게 유지 될 것으로 예상되지 않아야합니다.pgcancelconn구조.

pqcancelfinish #

배트맨 토토를 닫습니다 (아직 배트맨 토토 요청을 보내지 않은 경우). 또한에 사용 된 메모리를 해방합니다.pgcancelconnObject.

void pqcancelfinish (pgcancelconn *cancelConn);

배트맨 토토 시도가 실패하더라도 (pqcancelstatus), 응용 프로그램은 전화해야합니다pqcancelfinishpgcancelconn개체. 그만큼pgcancelconn포인터는 다시 사용해서는 안됩니다pqcancelfinish호출.

pqcancelreset #

재설정pgcancelconn따라서 새로운 배트맨 토토 연결을 위해 재사용 할 수 있습니다.

void pqcancelreset (pgcancelconn *cancelConn);

PGCANCELCONN현재 취소 요청을 보내는 데 사용되면이 연결이 닫힙니다. 그런 다음 준비합니다.PGCANCELCONN새로운 배트맨 토토 요청을 보내는 데 사용될 수 있도록 개체.

이것은 하나를 생성하는 데 사용될 수 있습니다PGCANCELCONNapgconn원래의 수명 내내 여러 번 재사용pgconn.

32.7.2. 배트맨 토토 요청을 보내기위한 쓸모없는 기능#

이러한 기능은 취소 요청을 보내는 이전 방법을 나타냅니다. 여전히 작동하지만 원래 연결이 지정된 경우에도 암호화 된 방식으로 취소 요청을 보내지 않아서는 더 이상 사용되지 않습니다.sslmode또는gssencmode암호화가 필요합니다. 따라서 이러한 오래된 방법은 새 코드에서 사용되는 데 크게 낙담하며 기존 코드를 변경하여 새로운 기능을 대신 사용하는 것이 좋습니다.

pqgetCancel #

사용을 사용하여 명령을 배트맨 토토하는 데 필요한 정보가 포함 된 데이터 구조를 만듭니다pqcancel.

pgcancel *pqgetcancel (pgconn *conn);

pqgetCancela 생성pgcancel객체가 주어진pgconn연결 객체. 돌아올 것입니다NULL주어진 경우connisNULL또는 잘못된 연결. 그만큼pgcancel객체는 응용 프로그램에서 직접 액세스 할 수없는 불투명 구조입니다. 전달 될 수 있습니다pqcancel또는PQFREECANCEL.

PQFREECANCEL #

pqgetCancel.

void pqfreecancel (pgcancel *cancel);

PQFREECANCEL이전에 생성 된 데이터 객체를 해제pqgetCancel.

pqcancel #

pqcancel|pqcancelblocking, 그러나 신호 핸들러 내에서 안전하게 사용할 수있는 것.

int pqcancel (pgcancel *취소, char *errbuf, int errbufsize);

pqcancel거꾸로 호환성 이유 때문에 존재합니다.pqcancelblocking대신 사용해야합니다. 유일한 혜택pqcancel|errbuf는 신호 핸들러의 로컬 변수입니다. 그러나 이것은 일반적 으로이 기능이 가지고있는 보안 문제의 가치가있는 충분한 이점으로 간주되지 않습니다.

thepgcancel객체는 읽기 전용으로pqcancel관련이 있으므로 조작하는 것과 별개의 스레드에서 호출 할 수도 있습니다pgconn개체.

반환 값pqcancel배트맨 토토 요청이 성공적으로 발송 된 경우 1이고 그렇지 않은 경우 0입니다. 그렇지 않다면errbuf설명 오류 메시지로 채워져 있습니다.errbuf크기의 숯불 배열이어야합니다errbufsize(권장 크기는 256 바이트).

PQREQUESTCANCEL #

PQREQUESTCANCEL|pqcancelblocking.

int pqRequestCancel (pgconn *conn);

PQREQUESTCANCEL거꾸로 호환성 이유 때문에 존재합니다.pqcancelblocking대신 사용해야합니다. 사용에 이점이 없습니다PQREQUESTCANCELOverpqcancelblocking.

서버가 현재 명령의 처리를 포기하도록 요청합니다. 직접 작동합니다.pgconn객체 및 고장의 경우 오류 메시지가에 저장됩니다.pgconn객체 (PQERRORMESSAGE). 기능은 동일하지만이 접근법은 다중 스레드 프로그램이나 신호 처리기 내에서 안전하지 않습니다.pgconn의 오류 메시지는 현재 연결 중에 진행중인 작업이 엉망이됩니다.

수정 제출

문서에 올바른 것이 없으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면