데이터베이스 서버에 대한 연결이 성공적으로 설정되면 여기에 설명된 기능을 사용하여 SQL 쿼리 및 명령을 수행합니다.
PQexec 서버에 명령을 제출하고 결과를 기다립니다.
PGresult *PQexec(PGconn *conn, const char *command);
a를 반환합니다.PGresult포인터 또는 널 포인터일 수도 있습니다. 메모리가 부족하거나 명령을 서버에 보낼 수 없는 등의 심각한 오류를 제외하고는 일반적으로 null이 아닌 포인터가 반환됩니다. 그만큼PQresultStatusfunction should be called to check the return value for any errors (including the value of a null pointer, in which case it will returnPGRES_FATAL_ERROR). 사용PQerrorMessage이러한 오류에 대한 자세한 정보를 얻으려면.
명령 스포츠 토토에는 여러 SQL 명령이 포함될 수 있습니다(세미콜론으로 구분). 단일로 전송된 여러 쿼리PQexec명시적인 사항이 없는 한 호출은 단일 트랜잭션으로 처리됩니다.시작/커밋쿼리 스포츠 토토을 여러 트랜잭션으로 나누기 위해 쿼리 스포츠 토토에 포함된 명령입니다. (보다섹션 52.2.2.1서버가 다중 쿼리 스포츠 토토을 처리하는 방법에 대한 자세한 내용은.) 그러나 반환된 내용에 유의하세요.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[]매개변수의 실제 값을 지정합니다. 이 배열의 널 포인터는 해당 매개변수가 널임을 의미합니다. 그렇지 않으면 포인터는 0으로 끝나는 텍스트 스포츠 토토(텍스트 형식의 경우) 또는 서버에서 예상하는 형식의 이진 데이터(이진 형식의 경우)를 가리킵니다.
paramLengths[]바이너리 형식 매개변수의 실제 데이터 길이를 지정합니다. null 매개변수 및 텍스트 형식 매개변수의 경우 무시됩니다. 바이너리 매개변수가 없으면 배열 포인터는 null일 수 있습니다.
paramFormats[]매개변수가 텍스트(해당 매개변수의 배열 항목에 0 입력)인지 바이너리(해당 매개변수의 배열 항목에 1 입력)인지 지정합니다. 배열 포인터가 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, $2등nParams은 유형이 배열에 미리 지정된 매개변수의 수입니다.paramTypes[]. (배열 포인터는 다음과 같습니다.NULL언제nParams0입니다.)paramTypes[]매개변수 기호에 할당할 데이터 유형을 OID별로 지정합니다. 만약에paramTypesisNULL이거나 배열의 특정 요소가 0인 경우 서버는 유형이 지정되지 않은 리터럴 문자열에 대해 수행하는 것과 동일한 방식으로 매개변수 기호에 데이터 유형을 할당합니다. 또한 쿼리는 다음보다 큰 숫자의 매개변수 기호를 사용할 수 있습니다.nParams; 이러한 기호에 대해서도 데이터 유형이 추론됩니다. (보다PQdescribe준비됨어떤 데이터 유형이 추론되었는지 알아내는 수단입니다.)
와 마찬가지로PQexec, 결과는 일반적으로 aPGresult내용이 서버 측 성공 또는 실패를 나타내는 개체입니다. null 결과는 메모리가 부족하거나 명령을 전혀 보낼 수 없음을 나타냅니다. 사용PQerrorMessage이러한 오류에 대한 자세한 정보를 얻으려면.
다음과 함께 사용하기 위해 준비된 명령문PQexec준비됨SQL을 실행하여 생성할 수도 있습니다준비문장. 또한 비록 없지만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그리고PQ매개변수 유형이것에 적용될 수 있습니다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현재 명령의 단일 결과 튜플을 포함합니다. 이 상태는 쿼리에 대해 단일 행 모드가 선택된 경우에만 발생합니다(참조PostgreSQL : 문서 : 12 : 33.5. 젠 토토 결과 검색 row-row).
결과 상태가 다음과 같은 경우PGRES_TUPLES_OK또는PGRES_SINGLE_TUPLE, 그러면 아래에 설명된 함수를 사용하여 쿼리에서 반환된 행을 검색할 수 있습니다. 참고하세요선택0개의 행을 검색하는 명령이 여전히 표시됩니다.PGRES_TUPLES_OK. PGRES_COMMAND_OK행을 반환할 수 없는 명령용입니다(삽입또는업데이트a 없이돌아오는 중절 등). 의 응답PGRES_EMPTY_QUERY클라이언트 소프트웨어의 버그를 나타낼 수 있습니다.
상태의 결과PGRES_NONFATAL_ERROR다음에서 직접 반환하지 않습니다.PQexec또는 기타 쿼리 실행 함수; 이러한 종류의 결과는 대신 알림 프로세서로 전달됩니다(참조PostgreSQL : 문서 : 12 : 33.12. 토토 사이트 추천 처리).
PQresStatus 다음에서 반환된 열거 유형을 변환합니다.PQresultStatus상태 코드를 설명하는 문자열 상수로. 호출자는 결과를 해제해서는 안 됩니다.
char *PQresStatus(ExecStatusType 상태);
PQresultErrorMessage 명령과 관련된 오류 메시지를 반환하거나, 오류가 없으면 빈 문자열을 반환합니다.
char *PQresultErrorMessage(const PGresult *res);
오류가 발생한 경우, 반환된 문자열에는 후행 개행 문자가 포함됩니다. 호출자는 결과를 직접 해제해서는 안 됩니다. 연결된 경우 해제됩니다.PGresult핸들이 다음으로 전달됨PQclear.
즉시 다음PQexec또는PQgetResult전화,PQerrorMessage(연결에서)는 다음과 같은 문자열을 반환합니다.PQresultErrorMessage(결과에 대해). 그러나 aPGresult연결이 파괴될 때까지 오류 메시지를 유지하는 반면, 후속 작업이 완료되면 연결의 오류 메시지가 변경됩니다. 사용PQresultErrorMessage특정 항목과 관련된 상태를 알고 싶을 때PGresult; 사용PQerrorMessage최근 연결 작업의 상태를 알고 싶을 때.
PQresultVerboseErrorMessage a와 관련된 오류 메시지의 형식이 변경된 버전을 반환합니다.PGresult객체.
char *PQresultVerboseErrorMessage(const PGresult *res,
PG자세한 표현,
PGContextVisibility show_context);
어떤 상황에서는 클라이언트가 이전에 보고된 오류에 대한 더 자세한 버전을 얻기를 원할 수도 있습니다.PQresultVerboseErrorMessage에 의해 생성된 메시지를 계산하여 이러한 요구를 해결합니다.PQresultErrorMessage지정된 세부 정보 설정이 해당 연결에 대해 적용된 경우PGresult생성되었습니다. 만약PGresult오류 결과가 아닙니다.“PGresult는 오류 결과가 아닙니다.”37840_37912
a에서 데이터를 추출하는 대부분의 다른 기능과는 달리PGresult, 이 함수의 결과는 새로 할당된 문자열입니다. 호출자는 다음을 사용하여 해제해야 합니다.PQfreemem()문자열이 더 이상 필요하지 않은 경우.
메모리가 부족하면 NULL 반환이 가능합니다.
PQresultErrorField오류 보고서의 개별 필드를 반환합니다.
char *PQresultErrorField(const PGresult *res, int fieldcode);
필드코드은 오류 필드 식별자입니다. 아래에 나열된 기호를 참조하세요.NULL다음의 경우 반환됩니다.PGresult은(는) 오류 또는 경고 결과가 아니거나 지정된 필드를 포함하지 않습니다. 필드 값에는 일반적으로 후행 줄 바꿈이 포함되지 않습니다. 호출자는 결과를 직접 해제해서는 안 됩니다. 연결된 경우 해제됩니다.PGresult핸들이 다음으로 전달됨PQclear.
다음 필드 코드를 사용할 수 있습니다:
PG_DIAG_SEVERITY심각도; 필드 내용은 다음과 같습니다.오류, 치명적, 또는패닉(오류 메시지에서) 또는경고, 공지, 디버그, 정보, 또는로그(알림 메시지에서) 또는 이들 중 하나의 현지화된 번역. 항상 존재합니다.
PG_DIAG_SEVERITY_NONLOCALIZED심각도; 필드 내용은 다음과 같습니다.오류, 치명적, 또는패닉(오류 메시지에서) 또는경고, 공지, 디버그, 정보, 또는로그(알림 메시지에서). 이는 다음과 동일합니다.PG_DIAG_SEVERITY필드는 내용이 현지화되지 않는다는 점만 제외합니다. 이는 다음에서 생성된 보고서에만 나타납니다.PostgreSQL버전 9.6 이상.
PG_DIAG_SQLSTATE 오류에 대한 SQLSTATE 코드. SQLSTATE 코드는 발생한 오류 유형을 식별합니다. 특정 데이터베이스 오류에 대한 응답으로 특정 작업(예: 오류 처리)을 수행하기 위해 프런트 엔드 응용 프로그램에서 사용할 수 있습니다. 가능한 SQLSTATE 코드 목록은 다음을 참조하세요.PostgreSQL : 문서 : 12 : 부록 A. PostgreSQL 토토 커뮤니티 코드. 이 필드는 현지화할 수 없으며 항상 존재합니다.
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실패한 내부 생성 명령의 텍스트입니다. 예를 들어 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오류를 보고하는 소스 코드 함수의 이름.
스키마 이름, 테이블 이름, 열 이름, 데이터 유형 이름 및 제약 조건 이름에 대한 필드는 제한된 수의 오류 유형에만 제공됩니다. 보다PostgreSQL : 문서 : 12 : 부록 A. PostgreSQL 토토 커뮤니티 코드. 이러한 필드가 있다고 해서 다른 필드가 있다는 것을 보장한다고 가정하지 마십시오. 핵심 오류 소스는 위에서 언급한 상호 관계를 관찰하지만 사용자 정의 함수는 이러한 필드를 다른 방식으로 사용할 수 있습니다. 같은 맥락에서, 이러한 필드가 현재 데이터베이스에 있는 동시대 개체를 나타낸다고 가정하지 마십시오.
클라이언트는 필요에 맞게 표시된 정보의 형식을 지정할 책임이 있습니다. 특히 필요에 따라 긴 줄을 끊어야 합니다. 오류 메시지 필드에 나타나는 줄 바꿈 문자는 줄바꿈이 아닌 단락 나누기로 처리되어야 합니다.
내부적으로 생성된 오류libpq심각도와 기본 메시지가 있지만 일반적으로 다른 필드는 없습니다. 3.0 이전 프로토콜 서버에서 반환된 오류에는 심각도와 기본 메시지가 포함되며 때로는 세부 메시지가 포함되지만 다른 필드는 포함되지 않습니다.
오류 필드는 다음에서만 사용할 수 있습니다.PGresult객체, 아님PGconn객체; 없어요PQerrorField함수.
PQcleara와 관련된 저장 공간을 비웁니다.PGresult. 모든 명령 결과는 다음을 통해 해제되어야 합니다.PQclear더 이상 필요하지 않은 경우.
void PQclear(PGresult *res);
당신은 다음을 유지할 수 있습니다.PGresult당신이 필요로 하는 한 계속해서 반대하십시오; 새 명령을 실행하거나 연결을 닫아도 사라지지 않습니다. 이를 제거하려면 전화해야 합니다.PQclear. 이렇게 하지 않으면 애플리케이션에서 메모리 누수가 발생합니다.
이 함수는 다음에서 정보를 추출하는 데 사용됩니다.PGresult성공적인 쿼리 결과를 나타내는 개체(즉, 상태가 있는 개체PGRES_TUPLES_OK또는PGRES_SINGLE_TUPLE). 성공적인 설명 작업에서 정보를 추출하는 데에도 사용할 수 있습니다. 설명의 결과에는 실제 쿼리 실행이 제공하는 것과 동일한 열 정보가 모두 포함되지만 행은 0개입니다. 다른 상태 값을 가진 개체의 경우 이러한 함수는 결과에 행이 0개와 열이 0개인 것처럼 작동합니다.
PQntuples 질의 결과의 행(튜플) 수를 반환합니다. (참고하세요PGresult객체는 최대로 제한됩니다.INT_MAX행, 그러니까int결과는 충분합니다.)
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)바PQfnumber(res, "FOO")0PQfnumber(res, "foo")0PQfnumber(res, "BAR")-1PQfnumber(res, "\"BAR\"")1
PQftable 주어진 열을 가져온 테이블의 OID를 반환합니다. 열 번호는 0부터 시작합니다.
Oid PQftable(const PGresult *res,
int 열_번호);
InvalidOid53611_53799pg_class정확하게 어떤 테이블이 참조되는지 확인합니다.
유형오이드그리고 상수InvalidOid다음을 포함하면 정의됩니다.libpq헤더 파일. 둘 다 정수 유형입니다.
PQftablecol 지정된 쿼리 결과 열을 구성하는 열의 열 번호(해당 테이블 내)를 반환합니다. 쿼리 결과 열 번호는 0부터 시작하지만 테이블 열에는 0이 아닌 숫자가 있습니다.
int PQftablecol(const PGresult *res,
int 열_번호);
열 번호가 범위를 벗어나거나 지정된 열이 테이블 열에 대한 단순 참조가 아니거나 3.0 이전 프로토콜을 사용하는 경우 0이 반환됩니다.
PQfformat 주어진 열의 형식을 나타내는 형식 코드를 반환합니다. 열 번호는 0부터 시작합니다.
int PQfformat(const PGresult *res,
int 열_번호);
형식 코드 0은 텍스트 데이터 표현을 나타내고, 형식 코드 1은 바이너리 표현을 나타냅니다. (다른 코드는 향후 정의를 위해 예약되어 있습니다.)
PQftype 주어진 열 번호와 연관된 데이터 유형을 반환합니다. 반환된 정수는 해당 유형의 내부 OID 번호입니다. 열 번호는 0부터 시작합니다.
Oid PQftype(const PGresult *res,
int 열_번호);
시스템 테이블을 쿼리할 수 있습니다.pg_type다양한 데이터 유형의 이름과 속성을 얻습니다. 그만큼OID내장 데이터 유형이 파일에 정의되어 있습니다.include/서버/카탈로그/pg_type_d.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널 값과 빈 스포츠 토토 값을 구별합니다.
포인터가 반환됨PQgetvalue다음의 일부인 저장소를 가리킵니다.PGresult구조. 가리키는 데이터를 수정해서는 안 되며, 수명이 지난 후 사용하려면 데이터를 다른 저장소에 명시적으로 복사해야 합니다.PGresult구조 자체.
PQgetisnull 필드에서 null 값을 테스트합니다. 행과 열 번호는 0부터 시작합니다.
int PQgetisnull(const PGresult *res,
정수 행_번호,
int 열_번호);
이 함수는 필드가 null이면 1을 반환하고 null이 아닌 값을 포함하면 0을 반환합니다. (참고하세요PQgetvalue널 필드에 대해 널 포인터가 아닌 빈 스포츠 토토을 반환합니다.)
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질의 결과를 인쇄하지만 더 이상 그렇지 않습니다. 모든 데이터가 텍스트 형식이라고 가정합니다.
이 함수는 다음에서 다른 정보를 추출하는 데 사용됩니다.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가 포함된 문자열을 반환하지만,PQoid값OID 값을 반환합니다.
char *PQoidStatus(const PGresult *res);
PQescapeLiteral char *PQescapeLiteral(PGconn *conn, const char *str, size_t length);
PQescapeLiteralSQL 명령 내에서 사용하기 위해 문자열을 이스케이프합니다. 이는 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()결과가 더 이상 필요하지 않을 때. 종료 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하나만 작동하는 클라이언트 프로그램에서 안전하게 사용할 수 있습니다.PostgreSQL한 번에 연결(이 경우 알아야 할 사항을 찾을 수 있음“비하인드 스토리”). 다른 상황에서는 보안 위험이 있으므로 피해야 합니다.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매개변수는 이스케이프할 스포츠 토토의 첫 번째 바이트를 가리키며,from_length매개변수는 이 바이너리 문자열의 바이트 수를 제공합니다. (종료 0바이트는 필요하지도 않고 계산되지도 않습니다.)to_length매개변수는 결과적으로 이스케이프된 문자열 길이를 보유할 변수를 가리킵니다. 이 결과 문자열 길이에는 결과의 종료 0바이트가 포함됩니다.
PQescapeByteaConn이스케이프된 버전을 반환합니다.에서다음으로 할당된 메모리의 매개변수 바이너리 문자열malloc(). 이 메모리는 다음을 사용하여 해제되어야 합니다.PQfreemem()결과가 더 이상 필요하지 않을 때. 반환 문자열에는 모든 특수 문자가 대체되어 에서 적절하게 처리될 수 있습니다.포스트그레SQL스포츠 토토 리터럴 파서 및바이테아입력 함수. 종료 0바이트도 추가됩니다. 둘러싸야 하는 작은따옴표포스트그레SQL스포츠 토토 리터럴은 결과 스포츠 토토의 일부가 아닙니다.
오류 발생 시 널 포인터가 반환되고 적절한 오류 메시지가 다음 파일에 저장됩니다.콘개체. 현재 가능한 유일한 오류는 결과 문자열에 대한 메모리가 부족하다는 것입니다.
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매개변수.