이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 32.3. 토토 꽁 머니 실행 함수버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

29.3. 명령 실행 기능

데이터베이스 서버에 대한 연결이 성공적으로 이루어지면 설정된 경우 여기에 설명된 함수는 SQL을 수행하는 데 사용됩니다. 쿼리 및 명령.

29.3.1. 주요 기능

PQexec

서버에 명령을 제출하고 다음을 기다립니다. 토토 결과.

PGresult *PQexec(PGconn *conn, const char *command);

a를 반환합니다.PGresult포인터 또는 널 포인터일 수도 있습니다. 널이 아닌 포인터는 일반적으로 메모리 부족 조건을 제외하고는 반환됩니다. 또는 명령을 보낼 수 없는 등의 심각한 오류 서버에. 널 포인터가 반환되면, 같은 취급을 받다PGRES_FATAL_ERROR토토 결과. 사용PQerrorMessage더 많은 정보를 얻으려면 그러한 오류에 대해.

여러 개의 SQL 명령을 포함할 수 있습니다( 세미콜론)을 명령 문자열에 입력합니다. 여러 쿼리가 한 번에 전송되었습니다. 싱글PQexec호출이 처리되었습니다 명시적으로 명시하지 않는 한 단일 거래에서시작/커밋명령 여러 개로 나누기 위해 쿼리 문자열에 포함 거래. 그러나 반환된 내용은 다음과 같습니다.PGresult구조는 결과만 설명합니다. 문자열에서 실행된 마지막 명령. 다음 중 하나를 수행해야 합니다. 명령이 실패하면 문자열 처리가 중지되고 반환됨PGresult설명합니다 오류 상태입니다.

PQexecParams

서버에 명령을 제출하고 다음을 기다립니다. 결과적으로 매개변수를 별도로 전달할 수 있는 기능이 제공됩니다. SQL 명령 텍스트에서.

PGresult *PQexecParams(PGconn *conn,
                       const char *명령,
                       정수 nParams,
                       const Oid *paramTypes,
                       const char * const *paramValues,
                       const int *paramLengths,
                       const int *paramFormats,
                       int resultFormat);

PQexecParams다음과 같습니다PQexec, 하지만 제안 추가 기능: 매개변수 값은 다음과 같습니다. 적절한 명령 문자열과 별도로 지정되며, 쿼리 결과는 텍스트 또는 바이너리로 요청할 수 있습니다. 형식.PQexecParams이다 프로토콜 3.0 이상 연결에서만 지원됩니다. 그것 프로토콜 2.0을 사용하면 실패합니다.

함수 인수는 다음과 같습니다:

명령을 보낼 연결 개체 통해.

명령

실행될 SQL 명령 문자열. 만약에 매개변수가 사용되며, 이는 다음에서 참조됩니다. 명령 문자열은 다음과 같습니다.$1, $2

nParams

제공된 매개변수의 수; 그것은 배열의 길이paramTypes[], paramValues[], paramLengths[]paramFormats[]. (배열 포인터는 다음과 같습니다.NULL언제nParams은 0입니다.)

paramTypes[]

할당될 데이터 유형을 OID로 지정합니다. 매개변수 기호에 만일paramTypesisNULL또는 다음의 특정 요소 배열이 0이면 서버가 데이터 유형을 추론합니다. 매개변수 기호에 대해서도 같은 방식으로 유형이 지정되지 않은 리터럴 문자열에 대해 수행합니다.

paramValues[]

매개변수의 실제 값을 지정합니다. 에이 이 배열의 널 포인터는 해당하는 것을 의미합니다. 매개변수가 null입니다. 그렇지 않으면 포인터가 다음을 가리킵니다. 0으로 끝나는 텍스트 문자열(텍스트 형식의 경우) 또는 서버가 예상하는 형식의 이진 데이터 (바이너리 형식의 경우).

paramLengths[]

실제 데이터 길이를 지정합니다. 바이너리 형식 매개변수. null인 경우 무시됩니다. 매개변수 및 텍스트 형식 매개변수. 배열 바이너리가 없으면 포인터가 null일 수 있습니다. 매개변수.

paramFormats[]

매개변수가 텍스트인지 여부를 지정합니다( 해당 배열 항목에 0이 있습니다. 매개변수) 또는 바이너리(배열 항목에 1을 입력하세요) 해당 매개변수의 경우). 배열의 경우 포인터가 null이면 모든 매개변수는 다음과 같이 간주됩니다. 텍스트 문자열이어야 합니다.

토토 결과형식

텍스트 형식으로 결과를 얻으려면 0을 지정하십시오. 또는 이진 형식으로 결과를 얻는 것입니다. (거기서 현재는 다른 혜택을 받을 수 있는 조항이 아닙니다. 결과 열은 형식이 다르지만 기본 프로토콜에서 가능합니다.)

주요 이점PQexecParams이상PQexec매개변수 값은 명령 문자열과 분리되므로 지루하고 오류가 발생하기 쉬운 인용 및 이스케이프.

달리PQexec, PQexecParams최대 하나의 SQL 명령을 허용합니다. 주어진 문자열에서. (세미콜론이 들어갈 수 있지만, 비어 있지 않은 명령이 두 개 이상 있습니다.) 이는 다음의 제한 사항입니다. 기본 프로토콜이지만 추가 기능으로 유용성이 있습니다. SQL 주입 공격에 대한 방어입니다.

팁:OID를 통해 매개변수 유형을 지정하는 것은 특히 하드 와이어링을 원하지 않는 경우에는 지루합니다. 특정 OID 값을 프로그램에 추가합니다. 그러나 다음을 수행할 수 있습니다. 서버 자체가 있는 경우에도 그렇게 하지 마십시오. 매개변수 유형을 결정할 수 없거나 원하는 유형과 다릅니다. SQL 명령 텍스트에서 표시하려면 매개변수 기호에 명시적 캐스트를 첨부하세요. 어떤 데이터 유형을 보낼지. 예를 들어,

x = $1::bigint인 mytable에서 *를 선택하세요.

이것은 매개변수를 강제합니다$1되다 다음과 같이 취급됨비긴트, 반면 기본적으로는 와 동일한 유형이 할당됩니다.x. 매개변수 유형 결정을 강제합니다. 이런 방식으로 또는 숫자 유형 OID를 지정하면 매개변수 값을 전송할 때 강력히 권장됩니다. 바이너리 형식(바이너리 형식은 중복성이 적기 때문) 텍스트 형식보다 서버가 유형 불일치 실수를 감지합니다.

PQprepare

다음을 사용하여 준비된 명령문을 작성하라는 요청을 제출합니다. 주어진 매개변수를 사용하고 완료될 때까지 기다립니다.

PGresult *PQprepare(PGconn *conn,
                    const char *stmt이름,
                    const char *쿼리,
                    정수 nParams,
                    const Oid *paramTypes);

PQprepare을 생성합니다 나중에 실행하기 위해 준비된 명령문PQexec준비됨. 이 기능을 사용하면 구문 분석을 위해 반복적으로 사용되는 명령 매번 계획하는 것이 아니라 한 번만 계획합니다. 실행되었습니다.PQprepare이다 프로토콜 3.0 이상 연결에서만 지원됩니다. 그것 프로토콜 2.0을 사용하면 실패합니다.

함수는 다음과 같은 준비된 명령문을 생성합니다.stmt이름에서질의문자열, 다음을 포함해야 함 단일 SQL 명령.stmt이름아마도""이름 없는 생성 진술, 이 경우 기존의 이름이 지정되지 않은 명령문은 자동으로 대체됩니다. 그렇지 않으면 그것은 명령문 이름이 이미 정의되어 있으면 오류가 발생합니다. 현재 세션. 매개변수를 사용하는 경우 해당 매개변수는 다음과 같습니다. 쿼리에서 다음과 같이 언급됩니다.$1, $2nParams은 다음에 대한 매개변수의 수입니다. 배열에 미리 지정된 유형paramTypes[]. (배열 포인터는 다음과 같을 수 있습니다.NULL언제nParams0입니다.)paramTypes[]OID로 데이터를 지정합니다. 매개변수 기호에 할당할 유형입니다. 만일paramTypesisNULL또는 배열이 0이면 서버는 데이터 유형을 매개변수 기호는 유형이 지정되지 않은 리터럴 문자열. 또한 쿼리에서 매개변수를 사용할 수도 있습니다. 다음보다 큰 숫자가 포함된 기호nParams; 데이터 유형은 다음에 대해 추론됩니다. 이 기호들도 마찬가지입니다. (참조PQdescribe준비됨찾는 수단을 위해 어떤 데이터 유형이 유추되었는지 알아보세요.)

와 마찬가지로PQexec, 토토 결과는 일반적으로 aPGresult내용이 서버 측 성공을 나타내는 개체 또는 실패. null 결과는 메모리가 부족하거나 명령을 전혀 보낼 수 없습니다. 사용PQerrorMessage더 많은 정보를 얻으려면 그러한 오류에 대해.

다음과 함께 사용하기 위해 준비된 명령문PQexec준비됨다음에 의해 생성될 수도 있습니다 SQL 실행PostgreSQL : 문서 : 8.2 : 스포츠 토토 베트맨문장. 또한 비록 없지만libpq준비된 삭제 기능 문, SQL해제문은 다음 용도로 사용될 수 있습니다. 그 목적.

PQexec준비됨

다음과 함께 준비된 명령문을 실행하라는 요청을 보냅니다 매개변수를 지정하고 결과를 기다립니다.

PGresult *PQexecPrepared(PGconn *conn,
                         const char *stmt이름,
                         정수 nParams,
                         const char * const *paramValues,
                         const int *paramLengths,
                         const int *paramFormats,
                         int resultFormat);

PQexec준비됨다음과 같습니다PQexecParams하지만 실행할 명령은 이름을 지정하여 지정됩니다. 쿼리를 제공하는 대신 이전에 준비된 명령문 문자열. 이 기능을 사용하면 사용할 명령이 허용됩니다. 한 번만 반복적으로 구문 분석하고 계획하는 것이 아니라 실행될 때마다. 진술에는 다음이 있어야합니다. 현재 세션에서 이전에 준비되었습니다.PQexec준비됨지원됩니다 프로토콜 3.0 이상 연결에서만 가능합니다. 그것은 실패할 것이다 프로토콜 2.0을 사용하는 경우.

매개변수는 다음과 동일합니다.PQexecParams, 단, 쿼리 문자열 대신 준비된 문이 제공됩니다. 그리고paramTypes[]매개변수 존재하지 않습니다 (준비되었으므로 필요하지 않습니다) 명령문의 매개변수 유형은 명령문이 실행될 때 결정되었습니다. 생성됨).

PQdescribe준비됨

다음에 관한 정보를 얻기 위해 요청을 제출합니다. 준비된 명령문을 지정하고 기다립니다. 완료.

PGresult *PQdescribePrepared(PGconn *conn, const char *stmtName);

PQdescribe준비됨응용 프로그램이 다음에 대한 정보를 얻을 수 있도록 허용합니다. 이전에 준비된 진술.PQdescribe준비됨다음에서만 지원됩니다. 프로토콜 3.0 이상 연결; 다음과 같은 경우에는 실패할 것입니다. 프로토콜 2.0을 사용합니다.

stmt이름아마도""또는 이름 없는 참조를 위한 NULL 명령문이 아니면 기존 명령문의 이름이어야 합니다. 준비된 진술. 성공하면, aPGresult상태 있음PGRES_COMMAND_OK반환됩니다. 는 기능PQnparams그리고PQparamtype적용될 수 있음 이것에PGresult얻다 준비된 매개변수에 대한 정보 명령문 및 함수PQn필드, PQfname, PQftype등은 다음에 대한 정보를 제공합니다. 명령문의 결과 열(있는 경우).

PQdescribePortal

에 관한 정보를 얻기 위해 요청을 제출합니다. 포털을 지정하고 완료될 때까지 기다립니다.

PGresult *PQdescribePortal(PGconn *conn, const char *portalName);

PQdescribePortal허용 이전에 관한 정보를 얻기 위한 신청서 포털을 만들었습니다. (libpq포털에 대한 직접적인 액세스를 제공하지 않지만 이 기능을 사용하여 속성을 검사할 수 있습니다. 커서는로 생성되었습니다.선언하다 커서SQL 명령.)PQdescribePortal다음에서만 지원됩니다. 프로토콜 3.0 이상 연결; 다음과 같은 경우에는 실패할 것입니다. 프로토콜 2.0을 사용합니다.

포털이름아마도""또는 참조하려면 NULL 이름이 지정되지 않은 포털, 그렇지 않으면 포털의 이름이어야 합니다. 기존 포털. 성공하면, aPGresult상태 있음PGRES_COMMAND_OK반환되었습니다. 는 기능PQn필드, PQfname, PQftype등이 다음에 적용될 수 있습니다.PGresult얻다 결과 열(있는 경우)에 대한 정보 포털.

PGresult구조는 반환된 토토 결과를 캡슐화합니다. 서버에 의해.libpq응용프로그램 프로그래머는 주의를 기울여 유지해야 합니다.PGresult추상화. 사용 아래의 접근자 함수를 사용하여 내용을 가져옵니다.PGresult. 직접적으로 언급하는 것을 피하세요. 의 필드PGresult구조 향후 변경될 수 있기 때문입니다.

PQresultStatus

명령의 결과 상태를 반환합니다.

ExecStatusType PQresultStatus(const PGresult *res);

PQresultStatus할 수 있다 다음 값 중 하나를 반환합니다.

PGRES_EMPTY_QUERY

서버로 전송된 문자열이 비어있습니다.

PGRES_COMMAND_OK

아니요를 반환하는 명령이 성공적으로 완료되었습니다. 데이터.

PGRES_TUPLES_OK

명령이 성공적으로 완료되었습니다. 데이터(예:선택또는표시).

PGRES_COPY_OUT

복사(서버에서) 데이터 전송 시작했습니다.

PGRES_COPY_IN

복사(서버로) 데이터 전송이 시작되었습니다.

PGRES_BAD_RESPONSE

서버의 응답을 이해할 수 없습니다.

PGRES_NONFATAL_ERROR

치명적이지 않은 오류(통지 또는 경고) 발생했습니다.

PGRES_FATAL_ERROR

치명적인 오류가 발생했습니다.

결과 상태가 다음과 같은 경우PGRES_TUPLES_OK, 그 다음에는 함수 아래 설명된 내용을 사용하여 반환된 행을 검색할 수 있습니다. 쿼리로. 참고하세요선택0개의 행을 검색하는 명령이 계속 표시됩니다.PGRES_TUPLES_OK. PGRES_COMMAND_OK다음을 수행할 수 있는 명령용입니다. 행을 반환하지 않음(삽입, 업데이트등). 의 응답PGRES_EMPTY_QUERY다음을 나타낼 수 있습니다. 클라이언트 소프트웨어의 버그입니다.

상태의 토토 결과PGRES_NONFATAL_ERROR절대로 반환되지 않습니다. 직접적으로PQexec또는 기타 쿼리 실행 기능; 이런 종류의 결과는 대신 알림 프로세서에 전달됩니다(참조섹션 29.11).

PQresStatus

다음에서 반환된 열거 유형을 변환합니다.PQresultStatus문자열 상수로 상태 코드를 설명합니다. 발신자는 통화를 해제해서는 안 됩니다. 결과입니다.

char *PQresStatus(ExecStatusType 상태);
PQresultErrorMessage

명령과 관련된 오류 메시지를 반환합니다. 또는 오류가 없으면 빈 문자열입니다.

char *PQresultErrorMessage(const PGresult *res);

오류가 있는 경우 반환된 문자열은 후행 개행 문자를 포함합니다. 발신자는 통화를 해제해서는 안 됩니다. 결과는 직접적으로. 연결된 경우 해제됩니다.PGresult핸들이 다음으로 전달됨PQclear.

a 즉시 따르기PQexec또는PQgetResult전화,PQerrorMessage(연결 시)는 와 동일한 문자열을 반환합니다.PQresultErrorMessage(결과에 대해). 그러나 aPGresult할 것이다 파괴될 때까지 오류 메시지를 유지하는 반면, 연결 오류 메시지는 이후에 변경됩니다. 작업이 완료되었습니다. 사용PQresultErrorMessage당신이 원할 때 특정과 관련된 상태를 알 수 있습니다.PGresult; 사용PQerrorMessage당신이 알고 싶을 때 최근 작업의 상태 연결.

PQresultErrorField

오류 보고서의 개별 필드를 반환합니다.

char *PQresultErrorField(const PGresult *res, int fieldcode);

필드코드오류 필드입니다. 식별자; 아래에 나열된 기호를 참조하세요.NULL다음의 경우 반환됩니다.PGresult오류나 경고가 아닙니다. 결과이거나 지정된 필드를 포함하지 않습니다. 필드 값에는 일반적으로 후행 개행 문자가 포함되지 않습니다. 는 호출자는 결과를 직접 해제해서는 안 됩니다. 그것은 될 것이다 연결된 경우 해제됨PGresult핸들이 다음으로 전달됨PQclear.

다음 필드 코드를 사용할 수 있습니다:

PG_DIAG_SEVERITY

심각도; 필드 내용은 다음과 같습니다.오류, 치명적또는패닉(오류 메시지에서) 또는경고, 공지, 디버그, 정보또는로그(알림 메시지에서) 또는 이들 중 하나의 현지화된 번역. 항상 현재.

PG_DIAG_SQLSTATE

오류에 대한 SQLSTATE 코드. SQLSTATE 코드는 발생한 오류 유형을 식별합니다. 발생; 프런트엔드 애플리케이션에서 사용할 수 있습니다. 특정 작업(예: 오류 처리) 특정 데이터베이스에 대한 응답으로 오류. 가능한 SQLSTATE 코드 목록을 보려면 참조Postgre범퍼카 토토 : 문서 :. 이 필드는 지역화할 수 없으며 항상 현재.

PG_DIAG_MESSAGE_PRIMARY

사람이 읽을 수 있는 주요 오류 메시지 (일반적으로 한 줄). 항상 존재합니다.

PG_DIAG_MESSAGE_DETAIL

세부사항: 선택적 보조 오류 메시지 문제에 대해 더 자세히 설명합니다. 다음으로 달릴 수 있음 여러 줄.

PG_DIAG_MESSAGE_HINT

힌트: 무엇을 해야할지 선택적 제안 문제. 이는 세부 사항과 다를 수 있습니다. 조언을 제공한다는 점에서(잠재적으로 부적절) 확실한 사실보다는 다음으로 달릴 수 있음 여러 줄.

PG_DIAG_STATEMENT_POSITION

다음을 나타내는 10진수 정수를 포함하는 문자열 오류 커서 위치를 인덱스로 원래 명령문 문자열. 첫 번째 캐릭터는 인덱스 1, 위치는 문자로 측정됩니다. 바이트가 아닙니다.

PG_DIAG_INTERNAL_POSITION

이것은 다음과 동일하게 정의됩니다.PG_DIAG_STATEMENT_POSITION필드이지만 커서 위치가 다음을 참조할 때 사용됩니다. 명령이 아닌 내부적으로 생성된 명령 클라이언트가 제출했습니다.PG_DIAG_INTERNAL_QUERY필드는 이 필드가 나타나면 항상 나타납니다.

PG_DIAG_INTERNAL_QUERY

실패한 내부 생성 텍스트 명령. 예를 들어 SQL 쿼리일 수 있습니다. PL/pgSQL 함수에 의해 발행됩니다.

PG_DIAG_CONTEXT

오류가 발생한 컨텍스트 표시 발생했습니다. 현재 여기에는 호출 스택이 포함됩니다. 활성 절차적 언어 함수의 추적 내부적으로 생성된 쿼리. 흔적은 하나다 한 줄에 항목이 가장 최근 항목부터 표시됩니다.

PG_DIAG_SOURCE_FILE

소스 코드 위치의 파일 이름 오류가 보고되었습니다.

PG_DIAG_SOURCE_LINE

소스 코드 위치의 줄 번호 오류가 보고된 위치입니다.

PG_DIAG_SOURCE_FUNCTION

소스 코드 함수 보고의 이름 오류입니다.

클라이언트는 표시된 형식을 담당합니다. 필요에 맞는 정보; 특히 그래야 한다 필요에 따라 긴 줄을 끊습니다. 줄 바꿈 문자가 나타납니다. 오류 메시지 필드에서는 다음과 같이 처리되어야 합니다. 줄바꿈이 아닌 단락 나누기입니다.

내부적으로 생성된 오류libpq심각도와 기본이 있습니다. 메시지가 있지만 일반적으로 다른 필드는 없습니다. 반환된 오류 3.0 이전 프로토콜 서버에서는 심각도와 기본 메시지, 때로는 세부 메시지이지만 다른 분야.

오류 필드는 다음에서만 사용할 수 있습니다.PGresult객체, 아님PGconn객체; 없어요PQerrorField함수.

PQclear

a와 관련된 저장 공간을 비웁니다.PGresult. 모든 명령 결과는 다음을 통해 해제됩니다.PQclear언제 더 이상 필요하지 않습니다.

void PQclear(PGresult *res);

당신은 다음을 유지할 수 있습니다.PGresult당신이 필요로 하는 한 주변에 있는 동안 반대하십시오; 그것은 가지 않는다 새로운 명령을 내릴 때나 닫을 때에도 연결. 이를 제거하려면 전화해야 합니다.PQclear. 이를 수행하지 않음 애플리케이션에서 메모리 누수가 발생합니다.

PQmakeEmptyPGresult

빈 공간을 구성합니다PGresult주어진 객체를 가진 객체 상태.

PGresult *PQmakeEmptyPGresult(PGconn *conn, ExecStatusType 상태);

이것은libpq의 빈 공간을 할당하고 초기화하는 내부 함수PGresult개체. 이 메모리를 할당할 수 없으면 함수는 NULL을 반환합니다. 일부 응용 프로그램에서 유용하다고 판단하여 내보냈습니다. 결과 개체(특히 다음을 포함하는 개체)를 생성합니다. 오류 상태) 자체. 만일null이 아니며상태오류를 나타냅니다. 현재 지정된 연결의 오류 메시지가 복사됩니다.PGresult. 참고하세요PQclear결국에는 그래야만 합니다 a와 마찬가지로 객체에 대해 호출됩니다.PGresult반환자libpq그 자체.

29.3.2. 쿼리 결과를 가져오는 중 정보

이 함수는 다음에서 정보를 추출하는 데 사용됩니다.PGresult다음을 나타내는 객체 성공적인 쿼리 결과(즉, 상태가 있는 결과)PGRES_TUPLES_OK). 그들은 또한 성공적인 설명에서 정보를 추출하는 데 사용됩니다. 작업: 설명 결과에 모두 동일한 열이 있습니다. 쿼리의 실제 실행이 제공하는 정보 하지만 행이 없습니다. 다른 상태 값을 가진 개체의 경우 이러한 함수는 결과에 행이 0개 있는 것처럼 작동하고 열이 없습니다.

PQntuples

질의의 행(튜플) 수를 반환합니다. 토토 결과.

int PQntuples(const PGresult *res);
PQn필드

각 행의 열(필드) 수를 반환합니다. 쿼리 토토 결과입니다.

int PQnfields(const PGresult *res);
PQfname

주어진 항목과 연관된 열 이름을 반환합니다. 열 번호. 열 번호는 0부터 시작합니다. 호출자 결과를 직접적으로 해제해서는 안 됩니다. 해방될 것이다 연결된 경우PGresult핸들이 다음으로 전달됨PQclear.

char *PQfname(const PGresult *res,
              int 열_번호);

NULL열이 다음인 경우 반환됩니다. 번호가 범위를 벗어났습니다.

PQf번호

주어진 항목과 연관된 열 번호를 반환합니다. 열 이름입니다.

int PQfnumber(const PGresult *res,
              const char *column_name);

-1은 주어진 이름이 일치하지 않는 경우 반환됩니다. 열.

주어진 이름은 SQL의 식별자처럼 처리됩니다. 즉, 큰따옴표가 없으면 대문자로 표시됩니다. 예를 들어, SQL에서 생성된 쿼리 결과가 주어지면 명령

1을 FOO로, 2를 "BAR"로 선택;

우리는 토토 결과를 얻을 것입니다:

PQfname(res, 0)fooPQfname(res, 1)PQf번호(res, "FOO")0PQfnumber(res, "foo")0PQfnumber(res, "BAR")-1PQfnumber(res, "\"BAR\"")1
PQftable

주어진 테이블의 OID를 반환합니다. 열을 가져왔습니다. 열 번호는 0부터 시작합니다.

Oid PQftable(const PGresult *res,
             int 열_번호);

InvalidOid다음과 같은 경우 반환됩니다. 열 번호가 범위를 벗어났거나 지정된 열이 테이블 열에 대한 간단한 참조가 아니거나 3.0 이전 프로토콜을 사용합니다. 시스템 테이블을 쿼리할 수 있습니다.pg_class정확하게 결정하려면 어떤 테이블이 참조되는지.

유형오이드및 상수InvalidOid다음 경우에 정의됩니다. 당신은 다음을 포함합니다.libpq헤더 파일. 둘 다 정수 유형입니다.

PQftablecol

테이블 내에서 열 번호를 반환합니다. 지정된 쿼리 결과 열을 구성하는 열입니다. 쿼리 결과 열 번호는 0부터 시작하지만 테이블 열은 0부터 시작합니다. 0이 아닌 숫자가 있습니다.

int PQftablecol(const PGresult *res,
                int 열_번호);

열 번호가 범위를 벗어나면 0이 반환됩니다. 또는 지정된 열이 테이블 열 또는 3.0 이전 프로토콜을 사용하는 경우.

PQfformat

형식을 나타내는 형식 코드를 반환합니다. 주어진 열. 열 번호는 0부터 시작합니다.

int PQfformat(const PGresult *res,
              int 열_번호);

형식 코드 0은 텍스트 데이터를 나타냅니다. 형식 코드 1은 이진수를 나타냅니다. 표현. (다른 코드는 향후를 위해 예약되어 있습니다. 정의.)

PQftype

주어진 열과 연관된 데이터 유형을 반환합니다. 번호. 반환된 정수는 내부 OID 번호입니다. 유형의. 열 번호는 0부터 시작합니다.

Oid PQftype(const PGresult *res,
            int 열_번호);

시스템 테이블을 쿼리할 수 있습니다.pg_type이름과 속성을 얻으려면 다양한 데이터 유형 중.OID48947_49012src/include/catalog/pg_type.h안에 소스 트리.

PQfmod

연관된 열의 유형 수정자를 반환합니다. 주어진 열 번호로. 열 번호는 다음에서 시작합니다. 0.

int PQfmod(const PGresult *res,
           int 열_번호);

수정자 값의 해석은 다음과 같습니다. 유형별; 일반적으로 정밀도나 크기를 나타냅니다. 한계. 값 -1은 다음을 나타내는 데 사용됩니다."사용 가능한 정보가 없습니다". 대부분의 데이터 유형은 수정자를 사용하지 않습니다. 이 경우 값은 다음과 같습니다. 항상 -1.

PQfsize

연관된 열의 크기를 바이트 단위로 반환합니다. 주어진 열 번호로. 열 번호는 다음에서 시작합니다. 0.

int PQfsize(const PGresult *res,
            int 열_번호);

PQfsize반환 데이터베이스 행에서 이 열에 할당된 공간 즉, 서버 내부의 크기 데이터 유형의 표현. (따라서 그렇지 않다. 클라이언트에게 정말 매우 유용합니다.) 음수 값 데이터 유형이 가변 길이임을 나타냅니다.

PQbinaryTuples

다음인 경우 1을 반환합니다.PGresult바이너리 데이터를 포함하고 텍스트 데이터를 포함하는 경우 0입니다.

int PQbinaryTuples(const PGresult *res);

이 기능은 더 이상 사용되지 않습니다(다음에서의 사용 제외). 와 연결됨복사) 왜냐하면 싱글이면 가능해요PGresult일부 텍스트 데이터를 포함하기 위해 다른 열 및 이진 데이터.PQfformat선호됩니다.PQbinaryTuples모두인 경우에만 1을 반환합니다. 결과 열은 바이너리입니다(형식 1).

PQgetvalue

a의 한 행에 대한 단일 필드 값을 반환합니다.PGresult. 행과 열 숫자는 0부터 시작합니다. 호출자는 결과를 해제해서는 안 됩니다. 직접. 연결된 경우 해제됩니다.PGresult핸들이 다음으로 전달됨PQclear.

char *PQgetvalue(const PGresult *res,
                 정수 행_번호,
                 int 열_번호);

텍스트 형식의 데이터에 대해 반환된 값은PQgetvalue은 null로 끝나는 문자열 표현 필드 값. 이진 형식 데이터의 경우 값은 다음과 같습니다. 데이터 유형에 의해 결정되는 이진 표현typsend그리고typreceive함수. (값은 실제로 이 경우에도 0바이트가 따라오지만 이는 일반적으로 유용하지 않습니다. 왜냐하면 그 가치는 아마도 포함된 null을 포함합니다.)

필드 값이 다음과 같은 경우 빈 문자열이 반환됩니다. 널. 참조PQgetisnull에 null 값과 빈 문자열 값을 구별합니다.

포인터가 반환됨PQgetvalue저장소를 가리킵니다. 의 일부PGresult구조. 그것이 가리키는 데이터를 수정해서는 안 됩니다. 데이터를 다른 저장소에 명시적으로 복사해야 합니다. 수명이 다한 후에 사용하려는 경우PGresult구조 자체.

PQgetisnull

필드에서 null 값을 테스트합니다. 행 및 열 번호 0부터 시작하세요.

int PQgetisnull(const PGresult *res,
                정수 행_번호,
                int 열_번호);

이 함수는 필드가 null인 경우 1을 반환하고 다음인 경우 0을 반환합니다. null이 아닌 값이 포함되어 있습니다. (참고하세요PQgetvalue빈 문자열을 반환합니다. null 필드의 경우 null 포인터가 아닙니다.)

PQgetlength

필드 값의 실제 길이를 바이트 단위로 반환합니다. 행과 열 번호는 0부터 시작합니다.

int PQgetlength(const PGresult *res,
                정수 행_번호,
                int 열_번호);

이것은 특정 데이터에 대한 실제 데이터 길이입니다 값, 즉 가리키는 객체의 크기PQgetvalue. 텍스트 데이터의 경우 형식은 다음과 같습니다.strlen(). 바이너리 형식의 경우 이는 다음과 같습니다. 필수 정보. 주의해야 할 점은 다음과 같습니다.아님의존하다PQfsize실제 데이터를 얻기 위해 길이.

PQnparams

준비된 매개변수의 수를 반환합니다. 진술.

int PQnparams(const PGresult *res);

이 기능은 다음을 검사할 때만 유용합니다. 결과PQdescribe준비됨. 다른 유형의 경우 쿼리하면 0이 반환됩니다.

PQ매개변수 유형

표시된 문의 데이터 유형을 반환합니다. 매개변수. 매개변수 번호는 0부터 시작합니다.

Oid PQparamtype(const PGresult *res, int param_number);

이 기능은 다음을 검사할 때만 유용합니다. 결과PQdescribe준비됨. 다른 유형의 경우 쿼리하면 0이 반환됩니다.

PQprint

모든 행과 선택적으로 열을 인쇄합니다. 지정된 출력 스트림에 이름을 붙입니다.

void PQprint(FILE *fout, /* 출력 스트림 */
             const PGresult *res,
             const PQprintOpt *po);

형식 정의 구조체 
    pqbool 헤더;      /* 출력 필드 제목과 행 개수를 인쇄합니다 */
    pqbool 정렬;       /* 필드 채우기 채우기 */
    pqbool 표준;    /* 오래된 뇌사 형식 */
    pqbool html3;       /* HTML 테이블 출력 */
    pqbool 확장;    /* 테이블 확장 */
    pqbool 호출기;       /* 필요한 경우 출력을 위해 호출기를 사용합니다 */
    char *fieldSep;   /* 필드 구분자 */
    char *tableOpt;   /* HTML 테이블 요소의 속성 */
    문자 *캡션;    /* HTML 테이블 캡션 */
    char **필드명; /* null로 끝나는 대체 필드 이름 배열 */
 PQprintOpt;

이 기능은 이전에 다음에서 사용되었습니다.psql질의 결과를 인쇄하지만 이것은 더 이상 사실이 아닙니다. 이는 모든 것을 가정한다는 점에 유의하십시오. 데이터는 텍스트 형식입니다.

29.3.3. 결과 정보 조회 다른 명령의 경우

이 함수는 다음에서 정보를 추출하는 데 사용됩니다.PGresult다음이 아닌 개체선택토토 결과.

PQcmd상태

SQL 명령에서 명령 상태 태그를 반환합니다. 생성된 것은PGresult.

char *PQcmdStatus(PGresult *res);

일반적으로 이는 단지 명령의 이름이지만 행 수와 같은 추가 데이터가 포함될 수 있습니다. 처리됨. 호출자는 결과를 해제해서는 안 됩니다. 직접. 연결된 경우 해제됩니다.PGresult핸들이 다음으로 전달됨PQclear.

PQcmdTuples

SQL의 영향을 받은 행 수를 반환합니다. 명령.

char *PQcmdTuples(PGresult *res);

이 함수는 숫자를 포함하는 문자열을 반환합니다 의 영향을 받은 행 수SQL다음을 생성한 문PGresult. 이 기능은 an 실행 후에만 사용됩니다.삽입, 업데이트, 삭제, 이동, 가져오기, 또는복사문장 또는실행59191_59241삽입, 업데이트또는삭제문장. 다음을 생성한 명령인 경우PGresult그 외 다른 것들은 없었습니다.PQcmdTuples반환 빈 문자열. 호출자는 반환 값을 해제해서는 안 됩니다. 직접. 연결된 경우 해제됩니다.PGresult핸들이 다음으로 전달됨PQclear.

PQoid값

OID를 반환합니다.삽입된 행의 경우,SQL명령은삽입정확히 한 행을 삽입했습니다. OID가 있는 테이블 또는 a실행다음을 포함하는 준비된 쿼리의 적합삽입문장. 그렇지 않으면 이 함수는 다음을 반환합니다.InvalidOid. 이 함수는 또한 반환됩니다.InvalidOid테이블이 영향을 받은 경우 에 의해삽입문은 그렇지 않습니다 OID를 포함합니다.

Oid PQoidValue(const PGresult *res);
PQoidStatus

다음의 경우 삽입된 행의 OID가 포함된 문자열을 반환합니다.SQL명령은삽입정확히 하나를 삽입했습니다. 행 또는 a실행준비된 적절한으로 구성된 명령문삽입. (문자열은 다음과 같습니다.0만일삽입정확히 하나의 행을 삽입하지 않았거나 대상 테이블이 OID가 없습니다.) 명령이 다음이 아닌 경우삽입, 빈 문자열을 반환합니다.

char *PQoidStatus(const PGresult *res);

이 기능은 다음을 위해 더 이상 사용되지 않습니다.PQoid값. 스레드로부터 안전하지 않습니다.

29.3.4. 문자열 이스케이프 SQL 명령에 포함

PQescapeStringConn이스케이프 SQL 명령 내에서 사용할 문자열입니다. 이는 다음과 같은 경우에 유용합니다. SQL 명령에 데이터 값을 리터럴 상수로 삽입합니다. 특정 문자(예: 따옴표 및 백슬래시)는 다음과 같아야 합니다. 특별히 해석되는 것을 방지하기 위해 이스케이프 처리했습니다. SQL 파서.PQescapeStringConn이 작업을 수행합니다.

팁:올바른 행동을 하는 것이 특히 중요합니다 로부터 수신된 문자열을 처리할 때 이스케이프 처리 신뢰할 수 없는 출처. 그렇지 않으면 보안 위험이 있습니다. 당신은 다음에 취약합니다."SQL 주입"원치 않는 SQL 명령이 포함된 공격 데이터베이스에 공급됩니다.

이스케이프를 수행하는 것은 필요하지도 정확하지도 않음을 참고하세요 데이터 값이 별도의 매개변수로 전달되는 경우PQexecParams또는 그 형제 루틴.

size_t PQescapeStringConn(PGconn *conn,
                           char *to, const char *from, size_t 길이,
                           int *오류);

PQescapeStringConn다음을 씁니다 이스케이프 버전의에서문자열 에버퍼, 특수 이스케이프 해를 끼치 지 않도록 문자를 추가하고 0바이트를 종료합니다. 둘러싸야 하는 작은따옴표포스트그레SQL문자열 리터럴은 다음과 같습니다. 결과 문자열에 포함되지 않습니다. 그들은 제공되어야합니다 결과가 삽입되는 SQL 명령입니다. 매개변수에서첫 번째 문자를 가리킵니다. 이스케이프할 문자열 및길이매개변수는 이 문자열. 종료 0바이트는 필요하지 않으며 계산에 포함되어서는 안 됩니다.길이. (만약 종료하는 0바이트가 이전에 발견되었습니다.길이바이트가 처리되었습니다.PQescapeStringConn0에서 멈춥니다. 는 따라서 행동은 오히려 다음과 같습니다strncpy.) 해야 한다 적어도 1바이트를 더 보유할 수 있는 버퍼를 가리킵니다. 값의 두 배 이상길이, 그렇지 않으면 동작이 정의되지 않습니다. 행동도 마찬가지 다음과 같은 경우 정의되지 않음그리고에서문자열이 겹칩니다.

만약에오류매개변수가 아님 NULL이면*오류다음에 0으로 설정됩니다. 성공, 오류 시 0이 아님. 현재 가능한 유일한 오류 조건에 소스의 잘못된 멀티바이트 인코딩이 포함됩니다. 문자열. 오류 발생 시 출력 문자열이 계속 생성되지만 서버가 잘못된 형식으로 거부할 것으로 예상할 수 있습니다. 켜짐 오류가 발생하면 적절한 메시지가에 저장됩니다.객체, 여부오류NULL입니다.

PQescapeStringConn반환 쓴 바이트 수, 아님 종료 0바이트를 포함합니다.

size_t PQescapeString(char *to, const char *from, size_t 길이);

PQescapeString이 나이가 많고, 더 이상 사용되지 않는 버전PQescapeStringConn; 차이점은 그것이다 걸리지 않습니다또는오류매개변수. 이 때문에 그럴 수 없다. 연결 속성에 따라 동작을 조정합니다. (예: 문자 인코딩) 따라서잘못된 토토 결과가 나올 수 있습니다. 또한 오류 조건을 보고할 방법이 없습니다.

PQescapeString사용 가능 에서만 작동하는 단일 스레드 클라이언트 프로그램에서 안전하게 하나포스트그레SQL연결 시간(이 경우 알아야 할 내용을 찾을 수 있습니다."뒤에서"). 다른 곳에서는 상황에 따라 보안 위험이 있으므로 피해야 합니다. 의PQescapeStringConn.

29.3.5. 바이너리 문자열 이스케이프 SQL 명령에 포함

PQescapeByteaConn

다음을 사용하여 SQL 명령 내에서 사용하기 위해 바이너리 데이터를 이스케이프합니다. 유형바이테아. 마찬가지로PQescapeStringConn이건 SQL에 데이터를 직접 삽입할 때만 사용됩니다. 명령 문자열.

부호 없는 문자 *PQescapeByteaConn(PGconn *conn,
                                 const unsigned char *from,
                                 size_t from_length,
                                 size_t *to_length);

특정 바이트 값반드시탈출됨(그러나 모두 바이트 값할 수 있다이스케이프됨) a의 일부로 사용되는 경우바이테아문자 그대로SQL문장. 일반적으로 탈출하려면 바이트는 세 자리 8진수로 변환됩니다. 옥텟 값과 동일하며 일반적으로 두 개가 앞에 옵니다. 백슬래시. 작은따옴표(') 및 백슬래시(\) 문자에는 특별한 대안이 있습니다. 이스케이프 시퀀스. 참조섹션 8.4더 보기 정보.PQescapeByteaConn이것을 수행합니다 최소한으로 필요한 것만 이스케이프하는 작업 바이트.

에서매개변수 포인트 이스케이프할 문자열의 첫 번째 바이트까지, 그리고from_length매개변수 이 이진 문자열의 바이트 수를 제공합니다. (A 0바이트 종료는 필요하지도 않고 계산되지도 않습니다.)to_length매개변수 포인트 결과 이스케이프 문자열을 보유할 변수 길이. 이 결과 문자열 길이에는 다음이 포함됩니다. 결과의 0바이트를 종료합니다.

PQescapeByteaConn이스케이프된 버전을 반환합니다.from메모리의 매개변수 바이너리 문자열 로 할당됨malloc(). 이 메모리는 다음을 사용하여 해제되어야 합니다.PQfreemem()결과가 no인 경우 더 이상 필요합니다. 반환 문자열에는 모든 특수 문자가 있습니다. 문자가 제대로 표시될 수 있도록 교체됨 에 의해 처리됨포스트그레SQL문자열 리터럴 파서, 그리고바이테아입력 함수. 에이 0바이트 종료도 추가됩니다. 작은따옴표 둘러싸야 함PostgreSQL문자열 리터럴은 그렇지 않습니다. 토토 결과 문자열의 일부입니다.

오류 발생 시 NULL 포인터가 반환되며 적절한 오류 메시지는에 저장됩니다.개체. 현재 유일한 가능한 오류는 결과를 저장할 메모리가 부족하다는 것입니다. 문자열.

PQescapeBytea

PQescapeBytea은 이전 버전, 더 이상 사용되지 않는 버전PQescapeByteaConn.

unsigned char *PQescapeBytea(const unsigned char *from,
                             size_t from_length,
                             size_t *to_length);

유일한 차이점은PQescapeByteaConn그렇군요PQescapeBytea다음을 취하지 않습니다PGconn매개변수. 때문에 따라서 상황에 따라 동작을 조정할 수 없습니다. 연결 속성(특히 표준 준수 문자열이 활성화됨) 따라서그것은 잘못된 토토 결과를 가져올 수도 있습니다 토토 결과. 또한 오류를 반환할 방법이 없습니다. 실패 시 메시지.

PQescapeBytea될 수 있습니다 작동하는 단일 스레드 클라이언트 프로그램에서 안전하게 사용됩니다. 하나만으로포스트그레SQL한 번에 연결(이 경우 무엇인지 알아낼 수 있음) 알아야 해."뒤에 장면"). 다른 맥락에서는 보안입니다. 위험하므로 피해야 합니다.PQescapeByteaConn.

PQunescapeBytea

바이너리 데이터의 문자열 표현을 다음으로 변환합니다. 이진 데이터 — 반대PQescapeBytea. 이는 다음과 같은 경우에 필요합니다. 검색 중바이테아텍스트의 데이터 형식이지만 바이너리 형식으로 검색할 때는 그렇지 않습니다.

unsigned char *PQunescapeBytea(const unsigned char *from, size_t *to_length);

에서매개변수 포인트 다음과 같은 문자열로 반환될 수 있습니다.PQgetvaluea에 적용할 때바이테아열.PQunescapeBytea이 문자열을 변환합니다 표현을 이진 표현으로 변환합니다. 그것은 반환 로 할당된 버퍼에 대한 포인터malloc(), 오류 시 null, 그리고 버퍼의 크기to_length. 결과는 해제되어야 합니다. 사용 중PQfreemem그때 더 이상 필요하지 않습니다.

이 변환은 정확히 반대가 아닙니다.PQescapeBytea, 왜냐하면 문자열은 그렇지 않을 것으로 예상됩니다."탈출"다음에서 수신할 때PQgetvalue. 특히 이것은 의미합니다 문자열 인용을 고려할 필요가 없습니다. 그러니 a가 필요없어요PGconn매개변수.

PQfreemem

다음에 의해 할당된 메모리 해제libpq.

void PQfreemem(void *ptr);

다음에 의해 할당된 메모리 해제libpq특히PQescapeByteaConn, PQescapeBytea, PQunescapeByteaPQ알림. 특히 이 기능이 중요합니다.무료(), Microsoft Windows에서 사용됩니다. DLL에 메모리를 할당하고 해제하기 때문입니다. 응용 프로그램에서는 다음과 같은 경우에만 작동합니다. 멀티스레드/단일 스레드, 릴리스/디버그 및 정적/동적 플래그는 DLL과 신청. Microsoft Windows 이외의 플랫폼에서는 이 함수는 표준 라이브러리 함수와 동일합니다.무료().