지원되는 버전 :현재(17) /16 / 15 / 14 / 13
개발 버전 :18 / Devel
지원되지 않는 버전 :12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
이 문서는 지원되지 않는 버전의 와이즈 토토을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다현재버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

1 장 와이즈 토토 -c 도서관

와이즈 토토C응용 프로그램 프로그래머의 인터페이스Postgres. 와이즈 토토는 허용하는 일련의 라이브러리 루틴입니다 쿼리를 전달하는 클라이언트 프로그램Postgres백엔드 서버 및 수신 이 쿼리의 결과.와이즈 토토도 있습니다 다른 여러 가지를위한 기본 엔진Postgres응용 프로그램 인터페이스,와이즈 토토 ++(C ++),libpgtcl(tcl),PerlECPG. 그래서 와이즈 토토의 행동의 일부 측면이 당신에게 중요 할 것입니다. 그 패키지 중 하나를 사용하십시오.

이 섹션의 끝에 3 개의 짧은 프로그램이 포함되어 있습니다. 사용하는 프로그램을 작성하는 방법을 보여려면와이즈 토토. 의 몇 가지 완전한 예가 있습니다.와이즈 토토다음의 응용 프로그램 디렉토리 :

../ src/test/regress
../src/test/examples
../src/bin/psql

사용하는 프로그램와이즈 토토헤더 파일을 포함해야합니다와이즈 토토-fe.h와이즈 토토도서관.

1.1. 데이터베이스 연결 기능

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

  • pqconnectdb새로운 것을 만듭니다 데이터베이스 서버 연결.

    pgconn *pqconnectdb (const char *conninfo)
    이 루틴은 The를 사용하여 새로운 데이터베이스 연결을 엽니 다 문자열에서 가져온 매개 변수Conninfo. 아래 pqsetdblogin ()과 달리 매개 변수 세트를 확장 할 수 있습니다 기능 서명을 변경하지 않고이 중 하나를 사용하십시오. 루틴 또는 비 블로킹 아날로그 PQConnectStart / PQConnectPoll은 응용 프로그램 프로그래밍에 선호됩니다. 통과 모든 기본 매개 변수를 사용하기 위해 문자열이 비어 있거나 공백으로 분리 된 하나 이상의 매개 변수 설정을 포함합니다.

    각 매개 변수 설정은 양식에 있습니다keyword = value. (널 값 또는 a를 작성하려면 공백을 포함하는 값, 단일 따옴표로 둘러싸고, 예 :keyword = 'value'. 하나의 값 내의 인용문은로 작성해야합니다.\ '. 동일한 부호 주위의 공간이 있습니다 선택 사항.) 현재 인식 된 매개 변수 키워드 이다:

    host

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

    hostaddr

    연결할 호스트의 IP 주소. 이것은해야합니다 BSD에서 사용하는 표준 번호 및 점 형식 기능 inet_aton et al. 0이 아닌 경우 문자열이 지정되고 TCP/IP 통신이 있습니다 사용된.

    호스트 대신 hostAddr을 사용하면 호스트 이름 조회를 피하기위한 응용 프로그램 시간 제약 조건이있는 응용 분야에서 중요합니다. 그러나 Kerberos 인증에는 호스트가 필요합니다 이름. 따라서 다음이 적용됩니다. 호스트 인 경우 HostAddr없이 지정된 호스트 이름 조회는 다음과 같습니다 강요된. hostaddr이 호스트없이 지정된 경우 HostAddr의 값은 원격 주소를 제공합니다. 만약에 Kerberos가 사용되면 반대 이름 쿼리가 발생합니다. 호스트와 hostaddr이 모두 지정되면 값이 있습니다 HostAddr의 경우 원격 주소를 제공합니다. 의 가치 Kerberos가 사용되지 않는 한 호스트는 무시됩니다 값이 Kerberos 인증에 사용되는 경우. LIBPQ 인 경우 인증이 실패 할 가능성이 높습니다 이름이 아닌 호스트 이름이 전달됩니다. hostaddr의 기계.

    호스트 이름 또는 호스트 주소가 없으면 Libpq 로컬 UNIX 도메인 소켓을 사용하여 연결합니다.

    포트

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

    dbname

    데이터베이스 이름.

    사용자

    사용자 이름으로 연결합니다.

    비밀번호

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

    옵션

    서버로 전송할 추적/디버그 옵션.

    tty

    옵션 디버그 출력을위한 파일 또는 tty 백엔드.

    요구 사항

    SSL 연결을 요구하려면 '1'으로 설정합니다 백엔드. Libpq는 다음과 같은 경우 연결을 거부합니다 서버는 SSL을 지원하지 않습니다. '0'(기본값)으로 설정하십시오 서버와 협상하십시오.

    매개 변수가 지정되지 않은 경우 해당 환경 변수 ( "환경 참조 변수 "섹션)이 확인됩니다. 환경 변수 인 경우 설정되지 않으면 하드 유선 기본값이 사용됩니다. 그만큼 반환 값은 추상 구조물에 대한 포인터입니다 백엔드와의 연결을 나타내는 것.
  • pqsetdblogin새로운 것을 만듭니다 데이터베이스 서버 연결.

    pgconn *pqsetdblogin (const char *pghost,
                         const char *pgport,
                         const char *pgoptions,
                         const char *pgtty,
                         const char *dbname,
                         const char *로그인,
                         const char *pwd)
    이것은의 전임자입니다.PQCONNECTDB고정 된 수의 매개 변수가 있지만 동일한 기능.
  • pqsetdb새로운 연결을 만듭니다 데이터베이스 서버에.

    pgconn *pqsetdb (char *pghost,
                    char *pgport,
                    char *pgoptions,
                    char *pgtty,
                    char *dbname)
    이것은 호출하는 매크로입니다pqsetdblogin ()로그인을위한 널 포인터와 함께 PWD 매개 변수. 주로 후진 호환성을 위해 제공됩니다 오래된 프로그램과 함께.
  • PQConnectStart, pqconnectpoll비 블로킹 방식으로 데이터베이스 서버.

    PGCONN *PQCONNECTSTART (Const Char *Conninfo)
    PostGrespollingStatUstype PQConnectPoll (PGCONN *CONN)
    이 두 루틴은 응용 프로그램의 실행 스레드가 그렇게하는 동안 원격 I/O에서 차단되지 않았습니다.

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

    PQConnectStart 및 PQConnectPoll은 다음과 같이 차단되지 않습니다 많은 제한이 충족되는 한 :

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

    • PQTRACE를 호출하는 경우 스트림 객체를 확인하십시오 당신이 추적하는 것은 차단되지 않습니다.

    • 당신은 소켓이 pqconnectpoll을 호출하기 전에 적절한 상태로 아래 설명.

    시작하려면 전화conn = pqConnectStart ( "<connection_info_string"). Conn이 NULL이면 LIBPQ가 새로운 PGCONN 구조. 그렇지 않으면 유효한 PGConn 포인터가 있습니다 반품 (아직 유효한 연결을 나타내지는 않지만 데이터베이스). PQConnectStart에서 돌아 오면 전화하십시오 상태 = pqstatus (conn). 상태가 Connection_Bad와 같은 경우 PQConnectStart가 실패했습니다.

    PQConnectStart가 성공하면 다음 단계는 설문 조사입니다 연결 시퀀스를 진행할 수 있도록 와이즈 토토. 따라서 루프 : 기본적으로 '비활성'연결을 고려하십시오. 만약에 pqconnectpoll 마지막으로 pgres_polling_active를 반환했습니다 대신 '활성'. PQConnectPoll (Conn)이 마지막으로 돌아온 경우 pgres_polling_Reading, eleg reading on one을 수행하십시오 PQSocket (Conn). 마지막으로 pgres_polling_writing을 반환 한 경우 pqsocket (conn)에서 작성하기 위해 선택하십시오. 당신이 있다면 그러나 PQConnectPoll, 즉 전화 후 PQConnectStart는 마치 마지막으로 돌아온 것처럼 행동합니다 pgres_polling_writing. SELECT가 소켓을 표시하는 경우 준비되어 있습니다. '활성'을 고려하십시오. 그것이 결정 되었다면 이 연결은 'Active'입니다. PQConnectPoll (Conn)에 전화하십시오. 다시. 이 호출이 pgres_polling_failed를 반환하면 연결 절차가 실패했습니다. 이 호출이 반환되는 경우 pgres_polling_ok, 연결이 성공적으로 이루어졌습니다 만들어진.

    소켓을 보장하기 위해 select ()의 사용 준비된 것은 단지 (아마도) 예일뿐입니다. 다른 사람들 Poll () 전화와 같은 시설은 물론 5 월 대신 사용하십시오.

    연결하는 동안 언제든지 PQSTatus에 전화하여 연결을 확인할 수 있습니다. 이것이 있다면 Connection_bad, 그런 다음 연결 절차가 실패했습니다. 이것이 Connection_ok라면 연결이 준비되었습니다. 이들 상태 중 하나는 똑같이 감지 할 수 있어야합니다 위와 같이 pqconnectpoll의 반환 값. 다른 주 비동기식 중에 (그리고 그리고 만) 보여 질 수 있습니다 연결 절차. 이것들은 현재 단계를 나타냅니다 연결 절차는 제공하는 데 유용 할 수 있습니다 예를 들어 사용자에게 피드백. 이러한 상태는 할 수 있습니다 포함하다:

    • Connection_Started : 연결을 기다리고 있습니다 만들어진.

    • Connection_Made : Connection OK; 보내기를 기다리고 있습니다.

    • Connection_awaiting_Response : 응답을 기다리고 있습니다 우체국 장에서.

    • Connection_auth_ok : 인증을 받았습니다. 대기 중 백엔드 스타트 ​​업을 위해.

    • Connection_Setenv : 협상 환경.

    이 상수는 여전히 남아 있지만 (in 호환성을 유지하기 위해) 응용 프로그램이 있어야합니다 특정 순서로 나타나는 것들에 의존하지 않거나 전혀, 또는 상태가 항상 이들 중 하나입니다. 문서화 된 값. 응용 프로그램은 같은 일을 할 수 있습니다 이것:
    스위치 (pqstatus (conn))
    
            Case Connection_Started :
                피드백 = "연결 ...";
                부서지다;
    
            Case Connection_Made :
                피드백 = "서버에 연결되어 ...";
                부서지다;
    .
    .
    .
            기본:
                피드백 = "연결 ...";

    PQConnectStart가 널이 아닌 포인터를 반환하는 경우, PQFinish에게 전화를 걸어야합니다. 구조 및 관련 메모리 폐기 명령 블록. PQConnectStart에 대한 호출에도 완료해야합니다. 또는 pqconnectpoll이 실패했습니다.

    PQConnectPoll은 현재 LIBPQ가 컴파일 된 경우 차단됩니다 use_ssl 정의 이 제한은 제거 될 수 있습니다 미래.

    PQConnectPoll은 현재 Windows에서 차단됩니다 LIBPQ는 win32_non_blocking_connections로 컴파일됩니다 한정된. 이 코드는 아직 Windows에서 테스트되지 않았습니다. 그리고 현재 기본적으로 꺼져 있습니다. 이것은 변경 될 수 있습니다 미래에.

    이 기능은 소켓을 비 블로킹 상태로 남겨 둡니다 마치 마치pqsetnonblocking라고 불리는.

  • pqconndefaults반환 기본 연결 옵션.

    pqconninfooption *pqconndefaults (void)
    
    구조 pqconninfooption
    
        char *키워드;   / * 옵션 키워드 */
        char *envvar;    / * 폴백 환경 변수 이름 */
        char *편집;  / * 기본값으로 컴파일 된 폴백 */
        char *val;       / * 옵션의 현재 값 또는 null */
        숯 *레이블;     / * 연결 대화 상자에서 필드에 대한 레이블 */
        char *dispchar;  /*이 필드에 표시 할 문자
                              연결 대화 상자에서. 값은 다음과 같습니다.
                              ""디스플레이가 그대로 입력되었습니다
                              "*"비밀번호 필드 - 값 숨기기
                              "D"디버그 옵션 - 기본적으로 표시하지 마십시오 */
        int dispsize;  / * 대화 상자의 문자의 필드 크기 */
    연결 옵션 배열을 반환합니다. 이것은 익숙 할 수 있습니다 가능한 모든 PQCONNECTDB 옵션 및 현재를 결정하십시오 기본값. 리턴 값은 배열을 가리 킵니다 pqconninfooption structs, null이있는 항목으로 끝납니다. 키워드 포인터. 기본값 ( "val"필드)은 그렇습니다 환경 변수 및 기타 컨텍스트에 따라 다릅니다. 발신자는해야합니다 연결 옵션 데이터를 읽기 전용으로 처리하십시오.

    옵션 배열을 처리 한 후 전달하여 자유롭게 해방하십시오 PQCONNINFOFREE ()로. 이 작업이 완료되지 않으면 소량 pqconndefaults ().에 대한 각 호출마다 메모리가 유출됩니다.

    7.0 이전의 Postgres 버전에서 pqconndefaults () 정적 배열에 대한 포인터를 동적으로 할당 된 배열. 그것은 스레드 안전이 아니 었습니다 행동이 바뀌 었습니다.

  • pqfinish연결을 닫습니다 백엔드에. 또한 PGConn이 사용하는 메모리를 해방합니다 물체.

    void pqfinish (pgconn *conn)
    백엔드 연결 시도가 실패하더라도 PQSTATUS로 표시), 응용 프로그램은 pqfinish로 호출해야합니다 pgconn 객체에서 사용하는 메모리를 자유롭게하십시오. PGCONN 포인터 pqfinish라고 불린 후에 사용해서는 안됩니다.
  • pqreset재설정 백엔드와의 통신 포트.

    void pqreset (pgconn *conn)
    이 기능은 백엔드에 대한 연결을 닫고 동일한 우체국 장에 대한 새로운 연결을 재건하려고 시도하고 이전에 사용 된 동일한 매개 변수를 모두 사용합니다. 이것은 유용 할 수 있습니다 작업 연결이 손실되면 오류 복구.
  • PQRESETSTART PQRESETPOLL통신 포트를 재설정합니다 백엔드와 함께, 비 블로킹 방식.

    int pqresetstart (pgconn *conn);
    PostGrespollingStatUstype PQRESETPOLL (PGCONN *CONN);
    이 기능은 백엔드와의 연결을 닫고 동일한 우체국 장에 대한 새로운 연결을 재건하려고 시도하고 이전에 사용 된 동일한 매개 변수를 모두 사용합니다. 이것은 유용 할 수 있습니다 작업 연결이 손실되면 오류 복구. 그들은 다릅니다 PQRESET (위)에서 비 블로킹 방식으로 작용한다는 점에서. 이러한 기능은 PQConnectStart와 동일한 제한을 겪습니다 및 pqconnectpoll.

    PQRESETSTART에 전화하십시오. 0을 반환하면 재설정이 있습니다 실패한. 1을 반환하면 pqresetpoll을 사용하여 재설정을 폴링하십시오 연결을 생성하는 것과 정확히 같은 방식으로 pqconnectpoll 사용.

LIBPQ 응용 프로그램 프로그래머는 유지해야합니다 PGConn 추상화. 아래의 액세서 기능을 사용하여 얻으십시오 pgconn의 내용에서. 직접 참조하지 마십시오 PGConn 구조의 필드는 미래의 변화. (시작Postgres릴리스 6.4, 정의 Struct Pgconn은에도 제공되지 않습니다.와이즈 토토-fe.h. 액세스하는 오래된 코드가있는 경우 PGConn 필드 직접,를 포함하여 계속 사용할 수 있습니다.와이즈 토토-int.h또한 당신도 있습니다 곧 코드를 수정하도록 권장했습니다.)

  • PQDB데이터베이스 이름을 반환합니다 연결의.

    char *pqdb (const pgconn *conn)
    PQDB 및 다음 몇 가지 함수는 값을 반환합니다 연결시 설정. 이 값은 수명을 위해 고정되어 있습니다 pgconn 객체.
  • PQUSER사용자 이름을 반환합니다 연결의.

    char *pquser (const pgconn *conn)
  • pqpass비밀번호를 반환합니다 연결.

    char *pqpass (const pgconn *conn)
  • pqhost서버 호스트를 반환합니다 연결 이름.

    char *pqhost (const pgconn *conn)
  • pqport포트를 반환합니다 연결.

    char *pqport (const pgconn *conn)
  • PQTTY디버그 tty를 반환합니다 연결.

    char *pqtty (const pgconn *conn)
  • pqoptions백엔드를 반환합니다 연결에 사용 된 옵션.

    char *pqoptions (const pgconn *conn)
  • PQSTATUS상태를 반환합니다 연결.

    Connstatustype pqstatus (const pgconn *conn)

    상태는 여러 값 중 하나 일 수 있습니다. 하지만, 이 중 두 개만이 비동기 외부에서 볼 수 있습니다. 연결 절차 -Connection_ok또는Connection_Bad. 좋은 연결 데이터베이스에는 상태 Connection_OK가 있습니다. 실패한 연결 시도는 상태에 따라 신호Connection_Bad. 일반적으로 괜찮은 상태입니다 까지 계속 남아있을 것입니다pqfinish, 그러나 통신 실패로 인해 상태가 발생할 수 있습니다 변경Connection_Bad조기. 이 경우 응용 프로그램이 시도 할 수 있습니다 전화로 복구pqreset.

    PQConnectStart 및 PQConnectPoll의 항목을 참조하십시오 볼 수있는 다른 상태 코드와 관련하여.

  • PQERRORMESSAGE반환합니다 가장 최근에 작업에 의해 생성 된 오류 메시지 연결.

    char * pqerrormessage (const pgconn * conn);

    거의 모든 와이즈 토토 함수가 설정됩니다PQERRORMESSAGE실패하면. 이에 주목하십시오 와이즈 토토 협약, 비어 있지 않은PQERRORMESSAGE후행이 포함됩니다 Newline.

  • pqbackendpid반환합니다 프로세스id33982_34040

    int pqbackendpid (const pgconn *conn);
    백엔드PID디버깅 목적 및 비교를 알리기 위해 메시지 (who 포함PID백엔드).PID로컬이 아닌 데이터베이스 서버 호스트에서 실행되는 프로세스 주인!
  • pqgetsslSSL을 반환합니다 연결에 사용 된 구조 또는 SSL이없는 경우 NULL 사용.

    ssl *pqgetssl (const pgconn *conn);
    이 구조는 암호화 레벨을 확인하는 데 사용할 수 있습니다. 서버 인증서 등. OpenSSL 문서를 참조하십시오 이 구조에 대한 정보.

    정의해야합니다use_sslin 이 기능의 프로토 타입을 얻으려면 이것을하고 있습니다 자동으로 포함됩니다SSL.HOpenSSL에서.

  • pqgetsslSSL을 반환합니다 연결에 사용 된 구조 또는 SSL이없는 경우 NULL 사용.

    ssl *pqgetssl (const pgconn *conn);
    이 구조는 암호화 레벨을 확인하는 데 사용할 수 있습니다. 서버 인증서 등. OpenSSL 문서를 참조하십시오 이 구조에 대한 정보.

    정의해야합니다use_sslin 이 기능의 프로토 타입을 얻으려면 이것을하고 있습니다 자동으로 포함됩니다SSL.HOpenSSL에서.