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

31.3. 토토 커뮤니티 실행 기능

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

31.3.1. 주요 기능

PQexec

서버에 토토 커뮤니티을 제출하고 결과를 기다립니다.

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

a를 반환합니다.PGresult포인터 또는 아마도 널 포인터일 것입니다. 널이 아닌 포인터는 일반적으로 메모리가 부족하거나 심각한 오류가 발생한 경우를 제외하고는 반환됩니다. 서버에 토토 커뮤니티을 보낼 수 없습니다. 그만큼PQresultStatus토토 커뮤니티를 호출하여 확인해야 합니다. 모든 오류에 대한 반환 값(널 값 포함) 포인터, 이 경우 반환됩니다.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언제nParams0입니다.)

paramTypes[]

OID별로 할당될 데이터 유형을 지정합니다. 매개변수 기호. 만약에paramTypesisNULL또는 배열이 0이면 서버는 매개변수에 대한 데이터 유형을 추론합니다. 유형이 지정되지 않은 리터럴에 대해 하는 것과 같은 방식으로 기호를 사용합니다. 끈.

paramValues[]

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

paramLengths[]

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

paramFormats[]

매개변수가 텍스트인지 여부를 지정합니다(배열에 0을 넣습니다) 해당 매개변수에 대한 항목) 또는 바이너리( 해당 매개변수에 대한 배열 항목). 배열 포인터인 경우 null이면 모든 매개변수가 텍스트 문자열로 간주됩니다.

바이너리 형식으로 전달된 값은 내부 지식이 필요합니다. 백엔드에서 예상되는 표현입니다. 예를 들어 정수는 다음과 같아야 합니다. 네트워크 바이트 순서로 전달됩니다. 통과숫자값을 사용하려면 서버 저장소에 대한 지식이 필요합니다. 형식(구현된 대로)src/backend/utils/adt/numeric.c::numeric_send()그리고src/backend/utils/adt/numeric.c::numeric_recv().

결과형식

텍스트 형식으로 결과를 얻으려면 0을 지정하고, 얻으려면 1을 지정하십시오. 결과는 바이너리 형식입니다. (현재는 이에 대한 조항이 없습니다. 다른 형식으로 다른 결과 열을 얻습니다. 기본 프로토콜에서 가능합니다.)

주요 이점PQexecParams이상PQexec매개변수 값을 분리할 수 있다는 점입니다 토토 커뮤니티 문자열에서 이렇게 하면 지루하고 지루한 작업이 필요하지 않습니다. 오류가 발생하기 쉬운 인용 및 이스케이프.

달리PQexec, PQexecParams최대 하나의 SQL 토토 커뮤니티을 허용합니다. 주어진 문자열. (세미콜론을 사용할 수 있지만 그 이상은 사용할 수 없습니다. 하나의 비어 있지 않은 토토 커뮤니티.) 이는 기본 토토 커뮤니티의 제한 사항입니다. 프로토콜이지만 추가 방어 수단으로 어느 정도 유용합니다. SQL 주입 공격.

팁:OID를 통해 매개변수 유형을 지정하는 것은 지루한 작업입니다. 특히 특정 OID 값을 직접 연결하지 않으려는 경우 귀하의 프로그램에. 그러나 경우에도 그렇게 하지 않을 수 있습니다. 서버 자체로는 유형을 결정할 수 없습니다. 매개변수를 선택하거나 원하는 것과 다른 유형을 선택합니다. SQL에서는 토토 커뮤니티 텍스트를 사용하려면 매개변수 기호에 명시적 캐스트를 첨부하세요. 보낼 데이터 유형을 보여줍니다. 예를 들어:

SELECT * FROM mytable WHERE x = $1::bigint;

이것은 매개변수를 강제합니다$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언제nParams이다 영.)paramTypes[]OID를 기준으로 다음을 지정합니다. 매개변수 기호에 할당할 데이터 유형입니다. 만약에paramTypesisNULL또는 배열의 특정 요소가 0인 경우, 서버는 동일한 매개변수 기호에 데이터 유형을 할당합니다. 유형이 지정되지 않은 리터럴 문자열에 대해 수행되는 방식입니다. 또한 쿼리는 다음보다 큰 숫자의 매개변수 기호를 사용하세요.nParams; 이에 대한 데이터 유형이 추론됩니다. 상징도 그렇고. (보다PQdescribe준비됨무엇을 알아내는 수단으로 데이터 유형이 추론되었습니다.)

다음과 같이PQexec, 결과는 다음과 같습니다 일반적으로PGresult그의 객체 콘텐츠는 서버측 성공 또는 실패를 나타냅니다. null 결과 메모리가 부족하거나 토토 커뮤니티을 전혀 보낼 수 없음을 나타냅니다. 사용PQerrorMessage더 많이 얻으려면 그러한 오류에 대한 정보.

다음과 함께 사용하기 위해 준비된 토토 커뮤니티문PQexec준비됨실행하여 생성할 수도 있습니다. SQLPostgreSQL : 문서 : 9.3 : 토토 캔문장. 또한, 비록 없지만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_COPY_BOTH

복사 입출력(서버 간) 데이터 전송이 시작되었습니다. 이것 기능은 현재 스트리밍 복제에만 사용되므로 이 기능은 일반 애플리케이션에서는 상태가 발생해서는 안 됩니다.

PGRES_SINGLE_TUPLE

PGresult단일 포함 현재 토토 커뮤니티의 결과 튜플입니다. 이 상태는 다음 경우에만 발생합니다. 쿼리에 대해 단일 행 모드가 선택되었습니다(참조섹션 31.5).

결과 상태가 다음과 같은 경우PGRES_TUPLES_OK또는PGRES_SINGLE_TUPLE, 그 다음에는 함수 아래에 설명된 방법을 사용하여 반환된 행을 검색할 수 있습니다. 질문. 참고하세요선택토토 커뮤니티하세요 0개 행을 검색해도 여전히 표시됩니다.PGRES_TUPLES_OK. PGRES_COMMAND_OK은 절대로 할 수 없는 토토 커뮤니티입니다 행 반환(삽입또는업데이트없이돌아오는 중절 등). 의 응답PGRES_EMPTY_QUERY클라이언트의 버그를 나타낼 수 있음 소프트웨어.

상태의 결과PGRES_NONFATAL_ERROR다음에서 직접 반환하지 않습니다.PQexec또는 기타 쿼리 실행 함수; 이러한 종류의 결과는 대신 통지 프로세서로 전달됩니다. (보다PostgreSQL : 문서 : 9.3 : 배트맨 토토 처리).

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 코드는 참조부록 A. 이 필드는 그렇지 않습니다. 현지화 가능하며 항상 존재합니다.

PG_DIAG_MESSAGE_PRIMARY

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

PG_DIAG_MESSAGE_DETAIL

세부사항: 자세한 내용을 포함하는 선택적인 보조 오류 메시지 문제에 대해. 여러 줄로 실행될 수 있습니다.

PG_DIAG_MESSAGE_HINT

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

PG_DIAG_STATEMENT_POSITION

오류 커서를 나타내는 십진 정수를 포함하는 문자열 원래 토토 커뮤니티문 문자열에 대한 색인으로 위치를 지정합니다. 첫 번째 문자의 인덱스는 1이고 위치는 1이 아닌 문자로 측정됩니다. 바이트.

PG_DIAG_INTERNAL_POSITION

이것은 다음과 동일하게 정의됩니다.PG_DIAG_STATEMENT_POSITION필드이지만 다음과 같은 경우에 사용됩니다. 커서 위치는 내부적으로 생성된 토토 커뮤니티을 나타냅니다. 클라이언트가 제출한 것이 아닌 그만큼PG_DIAG_INTERNAL_QUERY필드는 다음과 같은 경우 항상 표시됩니다. 이 필드가 나타납니다.

PG_DIAG_INTERNAL_QUERY

실패한 내부 생성 토토 커뮤니티의 텍스트입니다. 이것은 수 예를 들어 PL/pgSQL 함수에 의해 실행된 SQL 쿼리입니다.

PG_DIAG_CONTEXT

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

PG_DIAG_SCHEMA_NAME

오류가 특정 데이터베이스 개체와 관련된 경우, 해당 객체를 포함하는 스키마의 이름(있는 경우).

PG_DIAG_TABLE_NAME

오류가 특정 테이블과 관련된 경우, 테이블. (이름은 스키마 이름 필드를 참조하세요. 테이블의 스키마.)

PG_DIAG_COLUMN_NAME

오류가 특정 테이블 열과 관련된 경우, 열의 이름입니다. (스키마 및 테이블 이름 필드를 참조하여 테이블을 식별합니다.)

PG_DIAG_DATATYPE_NAME

오류가 특정 데이터 유형과 연관되어 있는 경우, 이름 데이터 유형의 (이름은 스키마 이름 필드를 참조하십시오. 데이터 유형의 스키마.)

PG_DIAG_CONSTRAINT_NAME

오류가 특정 제약 조건과 연관되어 있는 경우 이름 제약의. 관련 항목은 위에 나열된 필드를 참조하세요. 테이블 또는 도메인. (이 목적을 위해 인덱스는 다음과 같이 처리됩니다. 제약 조건을 사용하여 생성되지 않은 경우에도 제약 조건 통사론.)

PG_DIAG_SOURCE_FILE

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

PG_DIAG_SOURCE_LINE

오류가 발생한 소스 코드 위치의 줄 번호 보고되었습니다.

PG_DIAG_SOURCE_FUNCTION

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

참고:스키마 이름, 테이블 이름, 열에 대한 필드 이름, 데이터 유형 이름 및 제약 조건 이름은 제한된 수의 오류 유형; 보다부록 A. 가정하지 마십시오 이러한 필드가 있으면 다른 필드도 존재함을 보장합니다. 필드. 핵심 오류 소스는 언급된 상호 관계를 관찰합니다. 그러나 사용자 정의 함수는 이 필드를 다른 용도로 사용할 수 있습니다. 방법. 같은 맥락에서 이러한 필드가 다음을 의미한다고 가정하지 마십시오. 현재 데이터베이스의 현대 개체입니다.

클라이언트는 표시된 정보의 형식을 지정해야 합니다. 필요를 충족시키기 위해; 특히 다음과 같이 긴 줄을 끊어야 합니다. 필요합니다. 오류 메시지 필드에 나타나는 줄 바꿈 문자 줄바꿈이 아닌 단락 나누기로 처리되어야 합니다.

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

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

PQclear

a와 관련된 저장 공간을 비웁니다.PGresult. 모든 토토 커뮤니티 결과는 해제되어야 합니다. 을 통해PQclear더 이상 존재하지 않을 때 필요합니다.

void PQclear(PGresult *res);

당신은 다음을 유지할 수 있습니다.PGresult객체 필요한 만큼 오랫동안 주변에 있습니다. 당신이 할 때 그것은 사라지지 않습니다 새 토토 커뮤니티을 내리거나 연결을 닫더라도 마찬가지입니다. 얻으려면 제거하려면 전화해야 합니다.PQclear. 이렇게 하지 않으면 메모리 누수가 발생합니다. 애플리케이션.

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

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

PQntuples

질의 결과의 행(튜플) 수를 반환합니다. (메모 저것PGresult개체는 no로 제한됩니다. 이상INT_MAX행, 그러니까int결과는 충분합니다.)

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

질의의 각 행에 있는 열(필드) 수를 반환합니다. 결과.

int PQnfields(const PGresult *res);
PQfname

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

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

NULL42126_42178

PQf번호

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

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

주어진 이름이 어떤 열과도 일치하지 않으면 -1이 반환됩니다.

주어진 이름은 SQL 토토 커뮤니티의 식별자처럼 취급됩니다. 즉, 큰따옴표를 사용하지 않는 한 대문자로 표시됩니다. 예를 들어, 주어진 SQL 토토 커뮤니티에서 생성된 쿼리 결과:

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

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

PQfname(res, 0)fooPQfname(res, 1)PQfnumber(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이 아닌 숫자가 있습니다.

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

열 번호가 범위를 벗어나거나 지정된 열이 테이블 열에 대한 단순 참조가 아니거나 3.0 이전 프로토콜을 사용하는 경우.

PQfformat

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

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

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

PQftype

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

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

시스템 테이블을 쿼리할 수 있습니다.pg_type다양한 데이터 유형의 이름과 속성을 얻습니다. 그만큼OID45645_45700src/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입니다.)

필드 값이 null이면 빈 문자열이 반환됩니다. 보다PQgetisnull널을 구별하기 위해 빈 문자열 값의 값입니다.

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

PQgetisnull

필드에서 null 값을 테스트합니다. 행 및 열 번호는 다음에서 시작됩니다. 0.

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

이 토토 커뮤니티는 필드가 null이면 1을 반환하고 null이면 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);
typedef 구조체

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

이 기능은 이전에 다음에서 사용되었습니다.psql쿼리 결과를 인쇄하지만 이것은 아니오 경우가 더 길어집니다. 모든 데이터가 텍스트로 되어 있다고 가정합니다. 체재.

31.3.3. 다른 결과 검색 중 정보

이 함수는 다음에서 다른 정보를 추출하는 데 사용됩니다.PGresult객체.

PQcmd상태

SQL 토토 커뮤니티에서 토토 커뮤니티 상태 태그를 반환합니다. 생성됨PGresult.

char *PQcmdStatus(PGresult *res);

일반적으로 이것은 단지 토토 커뮤니티의 이름이지만, 처리된 행 수와 같은 추가 데이터를 포함합니다. 그만큼 호출자는 결과를 직접 해제해서는 안 됩니다. 다음과 같은 경우 해제됩니다. 관련된PGresult핸들은 전달됨PQclear.

PQcmdTuples

SQL 토토 커뮤니티의 영향을 받은 행 수를 반환합니다.

char *PQcmdTuples(PGresult *res);

이 토토 커뮤니티는 행 수를 포함하는 문자열을 반환합니다 의 영향을 받음SQL문장 생성된 것은PGresult. 이것 토토 커뮤니티는 a 실행 후에만 사용할 수 있습니다.선택, 다음으로 테이블 생성, 삽입, 업데이트, 삭제, 이동, 가져오기또는복사문장 또는실행준비된 를 포함하는 쿼리삽입, 업데이트또는삭제문. 다음을 생성한 토토 커뮤니티인 경우PGresult다른 것도 있었어,PQcmdTuples빈 문자열을 반환합니다. 발신자 반환 값을 직접 해제하면 안 됩니다. 다음과 같은 경우 해제됩니다. 관련된PGresult핸들은 전달됨PQclear.

PQoid값

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

Oid PQoidValue(const PGresult *res);
PQoidStatus

이 기능은 다음을 위해 더 이상 사용되지 않습니다.PQoid값그리고 스레드로부터 안전하지 않습니다. 그것은 삽입된 행의 OID가 있는 문자열, whilePQoid값OID 값을 반환합니다.

char *PQoidStatus(const PGresult *res);

31.3.4. 포함을 위한 문자열 이스케이프 SQL 토토 커뮤니티에서

PQescapeLiteral
char *PQescapeLiteral(PGconn *conn, const char *str, size_t length);

PQescapeLiteral문자열을 이스케이프합니다. SQL 토토 커뮤니티 내에서 사용됩니다. 데이터를 삽입할 때 유용합니다. SQL 토토 커뮤니티의 리터럴 상수로 값을 사용합니다. 특정 캐릭터 (예: 따옴표 및 백슬래시)를 방지하려면 이스케이프 처리해야 합니다. SQL 파서에 의해 특별히 해석되지 않습니다.PQescapeLiteral이 작업을 수행합니다.

PQescapeLiteral이스케이프된 항목을 반환합니다. 버전은str메모리의 매개변수 으로 할당됨malloc(). 이 기억 다음을 사용하여 해제해야 합니다.PQfreemem()결과가 더 이상 필요하지 않을 때. 종료 0바이트는 그렇지 않습니다. 필수이며 여기에 포함되어서는 안 됩니다.길이. (종료 0바이트가 발견된 경우 전에길이바이트가 처리되었습니다.PQescapeLiteral0에서 멈춥니다. 따라서 동작은 다소 다음과 같습니다strncpy.) 반환 문자열에는 모든 특수 문자가 있습니다. 문자가 적절하게 처리될 수 있도록 교체되었습니다.PostgreSQL문자열 리터럴 파서. 종료 0바이트도 추가됩니다. 작은따옴표는 다음과 같습니다. 서라운드PostgreSQL문자열 리터럴은 결과 문자열에 포함됩니다.

오류 발생 시,PQescapeLiteral반환NULL적절한 메시지가 다음 위치에 저장됩니다. 그만큼객체.

팁:적절한 탈출을 수행하는 것이 특히 중요합니다. 신뢰할 수 없는 사람으로부터 받은 문자열을 처리할 때 원천. 그렇지 않으면 보안 위험이 있습니다. 다음 사항에 취약합니다."SQL 주입"원치 않는 공격 SQL 토토 커뮤니티은 데이터베이스에 제공됩니다.

다음 경우에는 탈출하는 것이 필요하지도 않고 올바르지도 않다는 점에 유의하십시오. 데이터 값은에서 별도의 매개변수로 전달됩니다.PQexecParams또는 그 형제 루틴.

PQescapeIdentifier
char *PQescapeIdentifier(PGconn *conn, const char *str, size_t length);

PQescapeIdentifier이스케이프 테이블, 열 또는 SQL 식별자로 사용하기 위한 문자열 함수 이름. 이는 사용자가 제공한 식별자가 다음과 같은 경우에 유용합니다. 그렇지 않으면 해석되지 않는 특수 문자가 포함되어 있습니다. SQL 파서에 의해 식별자의 일부로 또는 식별자가 대소문자를 구분해야 하는 대문자가 포함될 수 있습니다. 보존됩니다.

PQescapeIdentifier반환 버전은str매개변수가 다음으로 이스케이프되었습니다. 할당된 메모리의 SQL 식별자malloc(). 이 메모리는 다음을 사용하여 해제되어야 합니다.PQfreemem()결과가 no인 경우 더 이상 필요합니다. 종료 0바이트는 필요하지 않으며, 포함되지 않음길이. (만약 종료하는 0바이트가 이전에 발견되었습니다.길이바이트가 처리되었습니다.PQescapeIdentifier0에서 멈춥니다. 그만큼 따라서 행동은 오히려 다음과 같습니다strncpy.) 반환 문자열에는 모든 특수 문자가 있습니다. SQL로 적절하게 처리되도록 문자를 대체했습니다. 식별자. 종료 0바이트도 추가됩니다. 반환 문자열은 큰따옴표로 묶입니다.

오류 발생 시,PQescapeIdentifier반환NULL적절한 메시지는 다음과 같습니다. 에 저장됨객체.

팁:문자열 리터럴과 마찬가지로 SQL 삽입을 방지하기 위해 공격이 발생하면 SQL 식별자를 수신할 때 이스케이프해야 합니다. 신뢰할 수 없는 출처에서 나온 것입니다.

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

PQescapeStringConn문자열을 이스케이프합니다 리터럴, 매우 유사PQescapeLiteral. 같지 않은PQescapeLiteral발신자는 적절한 크기의 버퍼를 제공하는 일을 담당합니다. 뿐만 아니라,PQescapeStringConn그렇습니다 둘러싸야 하는 작은따옴표를 생성하지 않음포스트그레SQL문자열 리터럴; 그들은 그래야 한다 결과가 삽입되는 SQL 토토 커뮤니티에 제공됩니다. 그만큼 매개변수에서첫 번째를 가리킵니다. 이스케이프할 문자열의 문자 및길이매개변수는 이 항목의 바이트 수를 제공합니다. 끈. 종료 0바이트는 필요하지 않으며, 그렇게 해서도 안 됩니다. 포함됨길이. (종료하는 경우 이전에 0바이트가 발견되었습니다.길이바이트 처리되었습니다.PQescapeStringConn0에서 멈춥니다. 따라서 동작은 다소 다음과 같습니다strncpy.) 해야 한다 그보다 적어도 1바이트 더 많은 바이트를 보유할 수 있는 버퍼를 가리킵니다. 값의 두 배길이, 그렇지 않으면 동작은 정의되지 않았습니다. 다음과 같은 경우에도 동작이 정의되지 않습니다.그리고에서문자열이 겹칩니다.

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

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

PQescapeString

PQescapeString더 나이가 많고, 더 이상 사용되지 않는 버전PQescapeStringConn.

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

유일한 차이점은PQescapeStringConn그렇군요PQescapeString걸리지 않습니다PGconn또는오류매개변수. 이로 인해 동작을 조정할 수 없습니다. 연결 속성(예: 문자 인코딩)에 따라 그러므로그것은 잘못된 결과. 또한 오류를 보고할 방법도 없습니다. 정황.

PQescapeString안전하게 사용할 수 있습니다 하나만 작동하는 클라이언트 프로그램에서포스트그레SQL한 번에 연결(이 경우 알아야 할 것이 무엇인지 알아낼 수 있습니다."뒤에 장면"). 다른 상황에서는 보안 위험이 있으며 다음을 위해 피해야 합니다.PQescapeStringConn.

PQescapeByteaConn

다음 유형의 SQL 토토 커뮤니티 내에서 사용하기 위해 바이너리 데이터를 이스케이프합니다.바이테아. 마찬가지로PQescapeStringConn, 이는 다음 경우에만 사용됩니다. SQL 토토 커뮤니티 문자열에 데이터를 직접 삽입합니다.

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

특정 바이트 값은 a의 일부로 사용될 때 이스케이프되어야 합니다.바이테아문자 그대로SQL진술.PQescapeByteaConn16진수를 사용하여 바이트를 이스케이프합니다. 인코딩 또는 백슬래시 이스케이프. 보다섹션 8.4더 많은 정보를 원하시면.

에서매개변수는 다음을 가리킵니다. 이스케이프할 문자열의 첫 번째 바이트 및from_length매개변수는 이 바이너리 문자열. (종료 0바이트는 필요하지 않습니다. 계산되지도 않습니다.)to_length매개변수 결과적으로 이스케이프된 문자열을 보유할 변수를 가리킵니다. 길이. 이 결과 문자열 길이에는 종료 0이 포함됩니다. 결과의 바이트입니다.

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

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

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. 특히 이것은 의미합니다 문자열 인용을 고려할 필요가 없으므로 필요하지 않습니다. 에 대한PGconn매개변수.