이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다토토 사이트 추천 : 문서 : 17 : 32 장. LIBPQ - C 라이브러리버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

27 장.libpq-C 라이브러리

libpqC응용 프로그램 프로그래머의 인터페이스PostgreSQL. libpq는 일련의 라이브러리 기능입니다 클라이언트 프로그램이 쿼리를 전달하도록 허용PostgreSQL백엔드 서버 및 수신 이 쿼리의 결과.libpq| 다른 여러 기타 엔진이기도합니다PostgreSQL응용 프로그램 인터페이스,libpq ++(C ++),libpgtcl(tcl),PerlECPG. 그래서의 일부 측면libpq의 행동이 중요합니다 당신은 그 패키지 중 하나를 사용합니다.

이 장의 끝에 일부 짧은 프로그램이 포함되어 있습니다. (섹션 27.14) 방법을 보여줍니다 사용하는 프로그램 작성libpq. 의 몇 가지 완전한 예도 있습니다.libpq디렉토리의 응용 프로그램src/test/examples소스 코드에서 분포.

사용하는 클라이언트 프로그램libpq헤더 파일을 포함해야합니다libpq-fe.hlibpq도서관.

27.1. 데이터베이스 연결 제어 기능

다음 기능은 a를 연결하는 것을 다룹니다.PostgreSQL백엔드 서버. an 응용 프로그램 프로그램에는 몇 가지 백엔드 연결이 열릴 수 있습니다 한 번에. (그렇게해야 할 이유 중 하나는 둘 이상의 액세스입니다. 데이터베이스.) 각 연결은 A로 표시됩니다.pgconn함수에서 얻은 객체PQCONNECTDB또는pqsetdblogin. 이러한 기능은 그럴 것입니다 아마도없는 객체 포인터를 항상 반환하십시오 할당하기에도 기억이 너무 적습니다pgconn개체. 그만큼pqstatus함수를 선택하여 확인해야합니다 쿼리 전에 와이즈 토토이 성공적으로 이루어 졌는지 여부 와이즈 토토 객체를 통해 전송됩니다.

PQCONNECTDB

데이터베이스 서버에 새로운 연결을합니다.

pgconn *pqconnectdb (const char *conninfo);

이 기능은 새로운 데이터베이스 연결을 사용하여 엽니 다 문자열에서 가져온 매개 변수Conninfo. 같지 않은pqsetdblogin아래, 매개 변수 세트 기능 서명을 변경하지 않고 확장 할 수 있습니다. 따라서이 기능 사용 (또는 비 차단 아날로그PQConnectStartandpqconnectpoll)가 선호됩니다 새로운 응용 프로그램 프로그래밍 용.

전달 된 문자열은 모든 기본값을 사용하기 위해 비어있을 수 있습니다. 매개 변수 또는 하나 이상의 매개 변수를 포함 할 수 있습니다 중학교로 분리 된 설정. 각 매개 변수 설정 양식에 있습니다keyword = value. (빈 값 또는 공백을 포함하는 값을 쓰려면 단일 따옴표로 둘러싸여 (예 :keyword = 'value'. 단일 따옴표 및 값 내의 백 슬래시는 a 백 슬래시, 즉\ 'and\\.) 동등한 공간 사인은 선택 사항입니다.

현재 인식 된 매개 변수 키 단어는 다음과 같습니다.

host

와이즈 토토할 호스트 이름.이것이 슬래시로 시작하면 UNIX- 도메인 커뮤니케이션을 지정합니다 TCP/IP 통신; 값은 이름입니다 소켓 파일이 저장되는 디렉토리. 그만큼 기본값은 Unix-Domain 소켓에 와이즈 토토하는 것입니다./tmp.

hostaddr

와이즈 토토할 호스트의 숫자 IP 주소. 이것 표준 IPv4 주소 형식에 있어야합니다. 예 :172.28.40.9. 당신의 경우 기계는 IPv6을 지원하므로 사용할 수도 있습니다 구애. TCP/IP 통신은 언제든지 사용됩니다 이를 위해 비어 있지 않은 문자열이 지정됩니다 매개 변수.

사용hostaddr대신 의host허용 호스트 이름 조회를 피하기위한 응용 프로그램 시간 제약 조건이있는 응용 분야에서 중요합니다. 그러나 Kerberos 인증에는 호스트가 필요합니다 이름. 따라서 다음은 적용됩니다 : ifhosthostaddr, 호스트 이름 조회가 발생합니다. 만약에hostaddrhost, 의 값hostaddr원격 주소를 제공합니다. Kerberos가 사용될 때, a 호스트 이름을 얻으려면 역 이름 쿼리가 발생합니다 Kerberos의 경우. 둘 다hostandhostaddrare 지정된 값hostaddr원격 주소를 제공합니다. 의 값hostis Kerberos가 사용되지 않는 한 무시됩니다 이 값은 Kerberos 인증에 사용됩니다. (인증이 실패 할 가능성이 높습니다libpq가 통과되었습니다 기계 이름이 아닌 호스트 이름 athostaddr.) 또한host대신hostaddr익숙합니다 의 와이즈 토토 식별$ home/.pgpass.

호스트 이름 또는 호스트 주소가 없으면libpq연결됩니다 로컬 유닉스 도메인 소켓 사용.

포트

서버 호스트에서 연결할 포트 번호 또는 Unix-Domain의 소켓 파일 이름 확장 사이.

dbname

데이터베이스 이름. 기본값은 동일합니다 사용자 이름.

사용자

postgresql사용자 연결할 이름.

암호

서버가 요구하는 경우 사용할 비밀번호 암호 인증.

Connect_Timeout

초의 최대 대기, 초의 최대 대기 (쓰기 소수 정수 문자열로). 제로 또는 지정되지 않았습니다 무기한 기다리는 것을 의미합니다. 권장되지 않습니다 2 초 미만의 시간 초과 사용.

옵션

명령 줄 옵션으로 전송됩니다 섬기는 사람.

tty

무시했습니다 (이전에는 보내야 할 위치가 지정되었습니다 서버 디버그 출력).

sslmode

이 옵션은 무엇을 결정합니다 우선 순위 anSSL와이즈 토토은 서버와 협상됩니다. 네 가지 모드가 있습니다 :비활성화만 시도합니다 암호화되지 않은SSL와이즈 토토;허용의지 협상, 먼저 비 시도SSL와이즈 토토, 그렇다면 실패, 시도SSL와이즈 토토;선호(기본값)는 협상 할 것입니다. 먼저 시도SSL와이즈 토토, 그렇다면 실패, 정규 비 시도SSL와이즈 토토;요구만 시도 할 것입니다SSL와이즈 토토.

ifpostgresql옵션을 사용하여 SSL 지원없이 컴파일됩니다요구오류 및 옵션허용and선호견딜 수 있지만libpq협상SSL와이즈 토토.

요구 사항

이 옵션은에 찬성하여 더 이상 사용되지 않습니다.sslmode설정.

1으로 설정된 경우, anSSL서버에 대한 연결은 다음과 같습니다 필수 (이것은에 해당합니다sslmode 요구).libpq그런 다음 거부합니다 서버가 수락하지 않으면 연결SSL와이즈 토토. 0으로 설정된 경우 (기본값),libpq협상 할 것입니다 서버와의 연결 유형 (sslmode 선호). 이 옵션은 전용입니다 사용 가능PostgreSQLSSL 지원.

서비스

추가 매개 변수에 사용할 서비스 이름. 에서 서비스 이름을 지정합니다pg_service.conf추가 연결 매개 변수. 이것은 허용합니다 서비스 이름 만 지정하는 응용 프로그램 연결 매개 변수를 중앙에서 유지할 수 있습니다. 보다prefix/Share/pg_service.conf.sample파일 설정 방법에 대한 정보.

매개 변수가 지정되지 않은 경우 해당 환경 변수 (참조섹션 27.10)가 확인되었습니다. 만약 환경 변수가 설정되지 않고 내장되었습니다 기본값이 사용됩니다.

pqsetdblogin

데이터베이스 서버에 새로운 연결을합니다.

pgconn *pqsetdblogin (const char *pghost,
                     const char *pgport,
                     const char *pgoptions,
                     const char *pgtty,
                     const char *dbname,
                     const char *로그인,
                     const char *pwd);

이것은의 전임자입니다.PQCONNECTDB고정 된 세트가 있습니다 매개 변수. 그 기능을 제외하고는 동일한 기능이 있습니다 누락 된 매개 변수는 항상 기본값을 사용합니다. 쓰다NULL또는 빈 문자열 고정 된 매개 변수 중 하나 기본값.

PQSETDB

데이터베이스 서버에 새로운 연결을합니다.

pgconn *pqsetdb (char *pghost,
                char *pgport,
                char *pgoptions,
                char *pgtty,
                char *dbname);

이것은 호출하는 매크로입니다pqsetdblogin로그인andPWD매개 변수. 그것은 제공됩니다 아주 오래된 프로그램과의 역 호환성.

PQConnectStart
pqconnectpoll

a 비 차단에서 데이터베이스 서버에 대한 연결 방법.

PGCONN *PQCONNECTSTART (const char *conninfo);
PostGrespolli와이즈 토토StatUstype PQConnectPoll (PgConn *Conn);

이 두 기능은 응용 프로그램의 스레드가되도록 데이터베이스 서버 그렇게하는 동안 원격 I/O에서 실행이 차단되지 않습니다. 이 접근법의 요점은 I/O가 대기한다는 것입니다. 오히려 애플리케이션의 기본 루프에서 완료가 발생할 수 있습니다 내부 아래에서PQCONNECTDB, 따라서 응용 프로그램이 가능합니다 이 작업을 다른 작업과 병렬로 관리하십시오 활동.

데이터베이스 연결은 매개 변수를 사용하여 이루어집니다 문자열에서 가져온Conninfo, 전달PQConnectStart. 이 문자열은 위에서 설명한 것과 동일한 형식입니다.PQCONNECTDB.

아니PQConnectStartNORPQConnectPoll의지 여러 제한이 충족되는 한 블록,

  • thehostaddrhost매개 변수가 사용됩니다 그 이름과 반대 이름을 보장하기 위해 적절하게 쿼리는 만들어지지 않습니다. 이 문서를 참조하십시오 아래의 매개 변수PQCONNECTDB위의 자세한 내용은

  • 전화하면pqtrace, 스트림 객체가 추적하는지 확인하십시오 차단하지 않을 것입니다.

  • 소켓이 적절한 지 확인하십시오 전화 전 상태PQConnectPoll, 설명대로 아래에.

비 차단 와이즈 토토 요청을 시작하려면 전화conn = pqConnectStart ( "Connection_info_stri와이즈 토토"). 만약에connlibpq할당 할 수 없었습니다 새로운pgconn구조. 그렇지 않으면 유효한pgconn포인터가 반환되었습니다 (아직 유효성을 나타내지는 않지만 데이터베이스 연결). 에서 돌아온시PQConnectStart, Call상태 = pqstatus (conn). 만약에상태equalsConnection_Bad, PQConnectStart실패했습니다.

ifPQConnectStart성공, 다음 단계는 투표하는 것입니다libpq가 진행될 수 있습니다 연결 순서. 사용pqsocket (conn)설명자를 얻으려면 데이터베이스 연결의 기본 소켓 고리 따라서 : ifPQConnectPoll (Conn)마지막 반품pgres_polli와이즈 토토_readi와이즈 토토, 기다릴 때까지 기다리십시오 소켓은 읽을 준비가되었습니다 (select (), poll ()또는 유사한 시스템 기능). 그런 다음 호출PQConnectPoll (Conn)다시. 거꾸로, 만약에pqconnectpoll (conn)마지막 반품pgres_polli와이즈 토토_writi와이즈 토토, 소켓이 쓸 준비가 될 때까지 기다렸다가 전화PQConnectPoll (Conn)다시. 아직 전화하지 않은 경우pqconnectpoll, 즉, 즉 전화PQConnectStart, 마지막으로 반환 된 것처럼 행동pgres_polli와이즈 토토_writi와이즈 토토. 이 루프를 계속하십시오 까지pqconnectpoll (conn)반환pgres_polli와이즈 토토_failed, 와이즈 토토 절차가 실패했거나pgres_polli와이즈 토토_ok, 와이즈 토토이 성공적으로 이루어졌습니다.

연결하는 동안 언제든지의 상태 전화를 통해 연결을 확인할 수 있습니다PQSTATUS. 이것이주는 경우Connection_Bad, 그런 다음 연결 절차가 실패했습니다. 주는 경우Connection_ok준비가 된. 이 두 상태는 모두 똑같이 감지 할 수 있습니다 의 반환 값PQConnectPoll, 위에서 설명합니다. 다른 상태는 AN에서 발생할 수 있습니다 비동기 연결 절차. 이것들은 연결 절차의 현재 단계 예를 들어 사용자에게 피드백을 제공하는 데 유용합니다. 이것들 상태는 :

Connection_started

와이즈 토토이 이루어지기를 기다리고 있습니다.

Connection_Made

와이즈 토토 확인; 보내기를 기다리고 있습니다.

Connection_awaiti와이즈 토토_Response

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

Connection_auth_ok

인증을 받았습니다. 백엔드를 기다리고 있습니다 마무리 시작.

Connection_SSL_STARTUP

SSL 암호화 협상.

Connection_Setenv

환경 중심 매개 변수 협상 설정.

이 상수는 여전히 남아 있지만 (in 호환성을 유지하기 위해), 응용 프로그램이어야합니다 특정 순서로 나타나는 것들에 의존하지 않거나 전혀, 또는 상태가 항상 이들 중 하나입니다. 문서화 된 값. 응용 프로그램은 같은 일을 할 수 있습니다 이것:

스위치 (pqstatus (conn))

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

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

theConnect_Timeout사용 할 때 연결 매개 변수가 무시됩니다PQCONNECTPOLL; 응용 프로그램입니다 과도한 양의 양을 결정해야 할 책임 시간이 경과했습니다. 그렇지 않으면,PQConnectStart뒤 따르는PQConnectPoll루프입니다 동등한PQCONNECTDB.

ifPQConnectStart널을 반환합니다 포인터, 전화해야pqfinish당신이 그것을 끝내면, 구조와 관련된 구조를 폐기하기 위해 메모리 블록. 와이즈 토토하더라도 수행해야합니다 시도는 실패하거나 포기됩니다.

pqconndefaults

기본 연결 옵션을 반환합니다.

pqconninfooption *pqconndefaults (void);

typedef struct

    char *키워드;   / * 옵션 키워드 */
    char *envvar;    / * 폴백 환경 변수 이름 */
    char *편집;  / * 기본값으로 컴파일 된 폴백 */
    char *val;       / * 옵션의 현재 값 또는 null */
    숯 *레이블;     / * 연결 대화 상자에서 필드에 대한 레이블 */
    char *dispchar;  /*이 필드에 표시 할 문자
                          연결 대화 상자에서. 값은 다음과 같습니다.
                          ""디스플레이가 그대로 입력되었습니다
                          "*"비밀번호 필드 - 값 숨기기
                          "D"디버그 옵션 - 기본적으로 표시하지 마십시오 */
    int dispsize;  / * 대화 상자의 문자의 필드 크기 */
 pqconninfooption;

연결 옵션 배열을 반환합니다. 이것은 사용될 수 있습니다 가능한 모든 결정PQCONNECTDB옵션 및 현재 기본값. 반환 값은 배열을 가리 킵니다pqconninfooption구조, 널이있는 항목으로 끝납니다키워드포인터. 현재입니다 기본값 (val필드) 환경 변수 및 기타 컨텍스트에 따라 다릅니다. 발신자는 연결 옵션 데이터를 처리해야합니다 읽기 전용.

옵션 배열을 처리 한 후 통과하여 자유롭게 해방하십시오PQCONNINFOFREE. 만약에 이것은 완료되지 않았으며 소량의 메모리가 유출됩니다. 각 전화pqconndefaults.

pqfinish

서버 연결을 닫습니다. 또한 메모리를 해방시킵니다 에 의해 사용pgconn개체.

void pqfinish (pgconn *conn);

서버 와이즈 토토 시도가 실패하더라도 (에 표시된대로PQSTATUS), 신청서는 전화해야pqfinishpgconn개체. 그만큼pgconn포인터를 다시 사용해서는 안됩니다 후에pqfinish라고 불리는.

pqreset

통신 채널을 서버로 재설정합니다.

void pqreset (pgconn *conn);

이 기능은 서버에 대한 연결을 닫습니다 그리고 같은 새로운 연결을 다시 설정하려고 이전에 사용한 동일한 매개 변수를 모두 사용하는 서버. 작동하는 경우 오류 복구에 유용 할 수 있습니다. 연결 손실.

PQRESETSTART
PQRESETPOLL

통신 채널을 서버로 재설정하십시오 비 차단 방식.

int pqresetstart (pgconn *conn);
PostGrespollingStatUstype PQRESETPOLL (PGCONN *CONN);

이 함수는 연결을 닫습니다 서버와 새로운 연결을 다시 설정하려고 이전에 동일한 매개 변수를 모두 사용하는 동일한 서버 사용된. 작동하는 경우 오류 복구에 유용 할 수 있습니다. 연결이 손실됩니다. 그들은 다릅니다pqreset(위) a 비 차단 방식. 이러한 기능은 동일하게 고통받습니다 제한PQConnectStartandpqconnectpoll.

와이즈 토토 재설정을 시작하려면 CallPQRESETSTART. 0을 반환하면 재설정이 실패했습니다. 1을 반환하면를 사용하여 재설정을 폴링합니다pqresetpoll정확히 를 사용하여 연결을 생성하는 것과 마찬가지로PQConnectPoll.