이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 32.3. 토토 커뮤니티 꽁 머니 실행 함수버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

31.3. 명령 실행 토토 커뮤니티

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

31.3.1. 주요 기능

PQEXEC

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

토토 커뮤니티 *pqexec (pgconn *conn, const char *command);

a 반환토토 커뮤니티포인터 또는 아마도 널 포인터 일 것입니다. 비 널 포인터는 일반적으로 될 것입니다 메모리 외 조건이나 심각한 오류를 제외하고 반환 명령을 서버로 보낼 수 없습니다. 그만큼pqresultstatus토토 커뮤니티를 확인하도록 요청해야합니다 모든 오류에 대한 반환 값 (널의 값 포함 포인터, 어떤 경우 반환pgres_fatal_error). 사용PQERRORMESSAGE그러한 자세한 정보를 얻으려면 오류.

명령 문자열에는 여러 SQL 명령이 포함될 수 있습니다 (분리 세미콜론에 의해). 단일로 전송 된 여러 쿼리PQEXEC통화는 단일로 처리됩니다 명시 적이없는 한 거래, 거래시작/커밋명령 쿼리 문자열에 포함되어 다중으로 나뉩니다. 업무. 그러나 반환 된 점에 유의하십시오토토 커뮤니티구조는 결과 만 설명합니다 마지막 명령은 문자열에서 실행되었습니다. 하나 야 명령이 실패하고 문자열 처리가 중지됩니다. 반품토토 커뮤니티오류를 설명합니다 상태.

pqexecparams

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

토토 커뮤니티 *pqexecparams (pgconn *conn,
                       const char *명령,
                       int nparams,
                       const oid *paramtypes,
                       const char * const * paramvalues,
                       const int *paramlengths,
                       const int *faramformats,
                       int resultformat);

pqexecparamsPQEXEC그러나 추가 기능을 제공합니다. 매개 변수 값은 명령과 별도로 지정할 수 있습니다 적절한 문자열 및 쿼리 결과는 텍스트 또는 이진 형식.pqexecparamsIS 프로토콜 3.0 이상 연결에서만 지원됩니다. 실패합니다 프로토콜 2.0을 사용할 때.

토토 커뮤니티 인수는 다음과 같습니다.

conn

명령을 전송할 연결 객체.

명령

실행될 SQL 명령 문자열. 매개 변수를 사용하는 경우 그들은 명령 문자열에서로 언급됩니다.$ 1, $ 2

nparams

제공되는 매개 변수 수; 그것은 길이입니다 배열Paramtypes [], Paramvalues ​​[], Paramlengths []FARTINFORMATS []. (배열 포인터가 될 수 있습니다NULL언제NPARAMSis Zero.)

Paramtypes []

OID에 의해 지정할 데이터 유형을 지정합니다. 매개 변수 기호. 만약에Paramtypesisnull또는 배열은 0이고 서버는 매개 변수의 데이터 유형을 유추합니다. 유형이없는 문자를 위해하는 것과 같은 방식으로 기호 끈.

Paramvalues ​​[]

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

Paramlengths []

이진 형식 매개 변수의 실제 데이터 길이를 지정합니다. NULL 매개 변수 및 텍스트 형식 매개 변수에 대해 무시됩니다. 그만큼 이진 매개 변수가 없을 때 배열 포인터가 무일하게 될 수 있습니다.

FARAMFORMATS []

매개 변수가 텍스트인지 지정합니다 (배열에 0을 넣으십시오. 해당 매개 변수의 항목) 또는 이진 (하나를 해당 매개 변수의 배열 항목). 배열 포인터 인 경우 NULL이면 모든 매개 변수는 텍스트 문자열로 추정됩니다.

이진 형식으로 전달 된 값은 내부에 대한 지식이 필요합니다. 백엔드에 의해 예상되는 표현. 예를 들어, 정수는해야합니다 네트워크 바이트 순서로 전달됩니다. 통과숫자값은 서버 스토리지에 대한 지식이 필요합니다 형식, 구현 된대로src/backend/utils/adt/numeric.c :: numeric_send ()andsrc/backend/utils/adt/numeric.c :: numeric_recv ().

resultformat

텍스트 형식으로 결과를 얻기 위해 0을 지정하거나 얻을 수 있습니다. 이진 형식을 초래합니다. (현재 조항이 없습니다 다른 형식의 다른 결과 열을 얻으십시오 기본 프로토콜에서 가능합니다.)

의 주요 장점pqexecparamsOverPQEXEC매개 변수 값을 분리 할 수 ​​있습니다 명령 문자열에서 오류가 발생하기 쉬운 인용 및 탈출.

와 달리PQEXEC, pqexecparams최대 하나의 SQL 명령을 허용합니다 주어진 문자열. (그 안에 세미콜론이있을 수 있지만 하나의 비어 있지 않은 명령.) 이것은 기본의 한계입니다. 프로토콜이지만에 대한 추가 방어로 유용성이 있습니다. SQL 주입 공격.

팁 :OID를 통한 매개 변수 유형 지정은 지루하고 지루합니다. 특히 특정 OID 값을 하드 와이어하지 않기를 원한다면 귀하의 프로그램에. 그러나 경우에도 그렇게하지 않을 수 있습니다 서버 자체가 매개 변수 또는 원하는 것과 다른 유형을 선택합니다. SQL에서 명령 텍스트, 명시 적 캐스트를 매개 변수 기호에 보낼 데이터 유형을 표시하십시오. 예를 들어:

선택 *에서 mytable에서 x = $ 1 :: bigint;

이 힘 매개 변수$ 1치료 받기 처럼bigint, 기본적으로는 그렇습니다 와 같은 유형을 할당x. 강제 파라미터 유형 결정, 이런 식으로 또는 숫자를 지정하여 유형 OID, 매개 변수 값을 보낼 때 강력히 권장됩니다. 이진 형식은 이진 형식이 텍스트보다 중복성이 적기 때문에 형식과 서버가 당신을위한 불일치 실수를 입력하십시오.

pqprepare

주어진과 함께 준비된 진술을 작성하라는 요청을 제출합니다. 매개 변수 및 완료를 기다립니다.

토토 커뮤니티 *pqprepare (pgconn *conn,
                    const char *stmtname,
                    const char *쿼리,
                    int nparams,
                    const oid *paramtypes);

pqprepare준비를 만듭니다 나중에 실행을위한 진술pqExecprepared. 이 기능은 명령을 허용합니다 반복적으로 사용하여 한 번만 구문 분석하고 계획을 세우는 것이 아니라 오히려 그들이 처형 될 때마다.pqprepare프로토콜 3.0에서만 지원됩니다 나중에 연결; 프로토콜 2.0을 사용하면 실패합니다.

이 토토 커뮤니티는 준비된 진술을 작성합니다.stmtname에서쿼리String, 단일 SQL 명령을 포함해야합니다.stmtnamecan be""to 이름이없는 진술을 작성하는데,이 경우 기존의 이름이없는 이름이없는 경우 명세서가 자동으로 교체됩니다. 그렇지 않으면 오류입니다 명령문 이름은 이미 현재 세션에서 정의되어 있습니다. 만약에 모든 매개 변수가 사용되며 쿼리에서로 표시됩니다.$ 1, $ 2NPARAMS는 매개 변수 수입니다 배열에서 미리 지정되는 유형Paramtypes []. (배열 포인터가 될 수 있습니다NULL언제NPARAMSis 영.)Paramtypes []OID, OID를 지정합니다. 매개 변수 기호에 할당 할 데이터 유형. 만약에ParamtypesisNULL또는 배열의 특정 요소는 0입니다. 서버는 데이터 유형을 동일하게 매개 변수 기호에 할당합니다. 그것은 무형 문자 문자열을 위해 할 수있는 방법입니다. 또한 쿼리가 가능합니다 숫자가 높은 매개 변수 기호 사용NPARAMS; 데이터 유형이 추론됩니다 기호도. (보다PQDESCREPREPARED무엇을 찾을 수있는 수단 데이터 유형이 추론되었습니다.)

withPQEXEC, 결과 일반적으로 A토토 커뮤니티객체 내용은 서버 측 성공 또는 실패를 나타냅니다. 널 결과 메모리 외부 또는 명령을 전혀 보낼 수 없음을 나타냅니다. 사용PQERRORMESSAGE더 많은 것을 얻으려면 그러한 오류에 대한 정보.

사용하기위한 준비된 진술pqExecprepared실행을 통해 만들 수도 있습니다 SQLPostgreSQL : 문서 : 9.3 : 토토 캔진술. 또한, 없지만libpq준비된 진술을 삭제하기위한 토토 커뮤니티, SQL딜 로이징명령문을 사용할 수 있습니다 목적.

pqExecprepared

주어진 상태에서 준비된 진술을 실행하라는 요청을 보냅니다. 매개 변수 및 결과를 기다립니다.

토토 커뮤니티 *pqexecprepared (pgconn *conn,
                         const char *stmtname,
                         int nparams,
                         const char * const * paramvalues,
                         const int *paramlengths,
                         const int *faramformats,
                         int resultformat);

pqExecprepared같아pqexecparams, 그러나 명령 실행 된 성명서를 지정하여 지정됩니다. 쿼리 문자열을 제공하는 대신. 이 기능은 명령을 허용합니다 반복적으로 사용하여 한 번만 구문 분석하고 계획을 세우는 것이 아니라 오히려 그들이 처형 될 때보다. 진술은 있었을 것입니다 현재 세션에서 이전에 준비되었습니다.pqExecprepared프로토콜 3.0에서만 지원됩니다 그리고 나중에 연결; 프로토콜 2.0을 사용하면 실패합니다.

매개 변수는 동일합니다pqexecparams, 준비된 이름을 제외하고 쿼리 문자열 대신에 명령문이 제공되며Paramtypes []매개 변수가 없습니다 (그렇지 않습니다 준비된 명령문의 매개 변수 유형이 필요했기 때문에 필요했습니다 그것이 만들어 졌는지 결정).

PQDESCREPREPARED

지정된 정보를 얻기위한 요청을 제출합니다 준비된 진술, 완료를 기다립니다.

토토 커뮤니티 *pqdescribeprepared (pgconn *conn, const char *stmtname);

PQDESCREPREPARED허용 an 이전에 준비된 정보를 얻기위한 적용 성명.PQDESCREPREPAREDIS 프로토콜 3.0 이상 연결에서만 지원됩니다. 실패합니다 프로토콜 2.0을 사용할 때.

stmtnamecan be""또는NULL참조 이름이없는 진술, 그렇지 않으면 기존의 이름이어야합니다. 준비된 진술. 성공에, A토토 커뮤니티상태pgres_command_ok반환됩니다. 기능PQNPARAMSPQPARAMTYPE이것에 적용 할 수 있습니다토토 커뮤니티에 대한 정보를 얻으려면 준비된 진술의 매개 변수 및 토토 커뮤니티pqnfields, pqfname, pqftype, 등의 결과 열 (있는 경우)에 대한 정보를 제공합니다. 성명.

pqdescribePortal

지정된 정보를 얻기위한 요청을 제출합니다 포털, 완료를 기다립니다.

토토 커뮤니티 *pqdescribePortal (pgconn *conn, const char *portalname);

pqdescribePortal허용 이전에 생성 된 정보를 얻기위한 응용 프로그램 문. (libpq제공하지 않습니다 포털에 직접 액세스하지만이 기능을 사용할 수 있습니다. a로 생성 된 커서의 속성을 검사하십시오.커서 선언SQL 명령.)pqdescribePortal는 프로토콜에서만 지원됩니다 3.0 이상 연결; 프로토콜을 사용할 때는 실패합니다 2.0.

PortalName할 수 있습니다""또는NULL참조 이름이없는 포털, 그렇지 않으면 기존 이름이어야합니다. 문. 성공에, A토토 커뮤니티상태pgres_command_ok반환됩니다. 그만큼 기능pqnfields, pqfname, pqftype, 기타는에 적용될 수 있습니다.토토 커뮤니티to 결과 열 (있는 경우)에 대한 정보를 얻습니다. 문.

the토토 커뮤니티구조가 캡슐화됩니다 결과는 서버에서 반환했습니다.libpq응용 프로그램 프로그래머가 있어야합니다 유지 관리 조심토토 커뮤니티추상화. 아래의 액세서 기능을 사용하여 의 내용토토 커뮤니티. 직접 피하십시오 의장 참조토토 커뮤니티미래에 변화를 받기 때문에 구조.

pqresultstatus

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

execstatustype pqresultstatus (const 토토 커뮤니티 *res);

pqresultstatus중 하나를 반환 할 수 있습니다 다음 값 :

pgres_empty_query

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

pgres_command_ok

데이터를 반환하는 명령의 성공적인 완료.

pgres_tuples_ok

명령을 성공적으로 완료하여 데이터를 반환합니다 (예 :select또는show).

pgres_copy_out

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

pgres_copy_in

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

pgres_bad_response

서버의 응답은 이해되지 않았습니다.

pgres_nonfatal_error

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

pgres_fatal_error

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

pgres_copy_both

복사/out (서버에서) 데이터 전송이 시작되었습니다. 이것 기능은 현재 스트리밍 복제에만 사용되므로 일반 응용 프로그램에서 상태가 발생하지 않아야합니다.

pgres_single_tuple

the토토 커뮤니티단일을 포함합니다 현재 명령에서 결과 튜플. 이 상태는 단지 경우에만 발생합니다 쿼리에 대해 단일 로우 모드가 선택되었습니다 (섹션 31.5).

결과 상태 인 경우PGRES_TUPLES_OK또는pgres_single_tuple그런 다음 토토 커뮤니티 아래 설명은 질문. Aselect명령 제로 행을 검색하여 여전히 표시pgres_tuples_ok. pgres_command_ok는 결코 할 수없는 명령입니다 반환 줄 (삽입또는업데이트a반환절 등). 의 응답pgres_empty_query클라이언트의 버그를 나타낼 수 있습니다 소프트웨어.

상태의 결과pgres_nonfatal_error|PQEXEC또는 기타 쿼리 실행 함수; 이런 종류의 결과는 대신 통지 프로세서로 전달됩니다. (보다PostgreSQL : 문서 : 9.3 : 배트맨 토토 처리).

pqresstatus

열거 된 유형을 변환pqresultstatus문자열 상수 설명 상태 코드. 발신자는 결과를 자유롭게하지 않아야합니다.

char *pqresstatus (execstatustype status);
PQRESULTERRORMESSAGE

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

char *pqresulterrormessage (const 토토 커뮤니티 *res);

오류가 있으면 반환 된 문자열에 후행 Newline. 발신자는 결과를 직접 자유롭게 해제해서는 안됩니다. 관련이 해방 될 것입니다토토 커뮤니티핸들이 전달되었습니다PQCLEAR.

바로 다음PQEXEC또는pqgetresultCall,PQERRORMESSAGE(연결 중)가 반환됩니다 와 동일한 문자열PQRESULTERRORMESSAGE(결과에서). 그러나 A토토 커뮤니티오류 메시지를 유지합니다 연결 될 때까지 연결 오류 메시지는 변경됩니다 후속 작업이 완료 될 때. 사용PQRESULTERRORMESSAGE당신이 알고 싶을 때 특정 상태토토 커뮤니티; 사용PQERRORMESSAGE상태를 알고 싶을 때 연결의 최신 작업에서

pqresulterrorfield

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

char *pqresultterrorfield (const 토토 커뮤니티 *res, int fieldcode);

FieldCode는 오류 필드입니다 식별자; 아래에 나열된 기호를 참조하십시오.NULL이 반환됩니다토토 커뮤니티오류 또는 경고 결과가 아닙니다 지정된 필드는 포함되지 않습니다. 필드 값은 일반적으로됩니다 후행 Newline을 포함하지 마십시오. 발신자는 자유롭게하지 않아야합니다 직접 결과. 관련이 해방 될 것입니다토토 커뮤니티핸들이 전달되었습니다PQCLEAR.

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

PG_DIAG_SEVERITY

심각도; 필드 내용은오류, 치명적또는panic(오류 메시지에서) 또는경고, 통지, 디버그, Info, 또는log(통지 메시지에서) 또는 현지화 이것들 중 하나의 번역. 항상 존재합니다.

PG_DIAG_SQLSTATE

오류에 대한 sqlstate 코드. sqlstate 코드가 식별합니다 발생한 오류의 유형; 프론트 엔드에서 사용할 수 있습니다 특정 작업 (예 : 오류)을 수행하기위한 응용 프로그램 처리) 특정 데이터베이스 오류에 대한 응답으로. 목록 가능한 sqlstate 코드, 참조부록 A. 이 필드는 아닙니다 현지화 가능하고 항상 존재합니다.

PG_DIAG_MESSAGE_PRIMARY

기본 인간 읽을 수있는 오류 메시지 (일반적으로 한 줄). 항상 존재합니다.

PG_DIAG_MESSAGE_DETAIL

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

PG_DIAG_MESSAGE_HINT

힌트 : 문제에 대해 무엇을 해야하는지 선택 사항. 이것 조언을 제공한다는 점에서 세부 사항과 다르기위한 것입니다. 어려운 사실보다는 (잠재적으로 부적절한). 실행될 수 있습니다 여러 줄.

pg_diag_statement_position

오류 커서를 나타내는 소수 정수를 포함하는 문자열 원래 문자열에 인덱스로 배치하십시오. 첫 번째 문자는 색인 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. 그것을 가정하지 마십시오 이 분야의 존재는 다른 분야의 존재를 보장합니다. 필드. 핵심 오류 소스는 언급 된 상호 관계를 관찰합니다 위의, 그러나 사용자 정의 함수는 다른 필드를 다른 필드를 사용할 수 있습니다. 방법. 같은 맥락 에서이 필드가 현재 데이터베이스의 현대 객체.

클라이언트는 표시된 정보 서식을 담당합니다 그 요구를 충족시키기 위해; 특히 긴 줄을 끊어야합니다 필요합니다. 오류 메시지 필드에 나타나는 Newline 문자 라인 브레이크가 아니라 단락 브레이크로 취급되어야합니다.

내부적으로 생성 된 오류LIBPQ심각도와 기본 메시지가 있습니다. 그러나 일반적으로 다른 분야는 없습니다. a Pre-3.0 Protocol 서버에는 심각도 및 기본 메시지가 포함됩니다. 때로는 세부 메시지이지만 다른 필드는 없습니다.

오류 필드는에서만 사용할 수 있습니다.토토 커뮤니티객체, 아님pgconn개체; 없음PQERRORFIELD기능.

PQCLEAR

토토 커뮤니티. 모든 명령 결과는 해제되어야합니다 을 통해PQCLEAR더 이상 없을 때 필요합니다.

void pqclear (토토 커뮤니티 *res);

당신은 a를 유지할 수 있습니다.토토 커뮤니티개체 당신이 필요로하는 한 주위에; 당신이있을 때는 사라지지 않습니다 새로운 명령을 발행하거나 연결을 닫더라도. 얻기 위해 제거해야합니다. 전화해야PQCLEAR. 이렇게하지 않으면 메모리가 누출됩니다. 애플리케이션.

31.3.2. 쿼리 결과 검색 정보

이 함수는 a에서 정보를 추출하는 데 사용됩니다.토토 커뮤니티성공적인 쿼리 결과 (즉, 상태가있는 것pgres_tuples_ok또는pgres_single_tuple). 그들은 또한 익숙해 질 수 있습니다 성공적인 설명 작업에서 정보를 추출하십시오 설명의 결과는 실제와 동일한 열 정보를 가지고 있습니다. 쿼리의 실행은 제공하지만 행은 0입니다. 을 위한 다른 상태 값이있는 개체, 이러한 기능은 다음과 같이 작동합니다. 결과에는 0 행과 0 열이 있습니다.

pqntuples

쿼리 결과에서 행 수 (튜플)를 반환합니다. (메모 저것토토 커뮤니티개체는 NO로 제한됩니다 이상int_max행, anint결과는 충분합니다.)

int pqntuples (const 토토 커뮤니티 *res);
pqnfields

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

int pqnfields (const 토토 커뮤니티 *res);
pqfname

주어진 열 번호와 관련된 열 이름을 반환합니다. 열 번호는 0에서 시작합니다. 발신자는 결과를 자유롭게하지 않아야합니다. 곧장. 관련이 해방 될 것입니다토토 커뮤니티핸들이 전달되었습니다PQCLEAR.

char *pqfname (const 토토 커뮤니티 *res,
              int column_number);

null열 번호가 있으면 반환됩니다 범위 밖.

pqfnumber

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

int pqfnumber (const 토토 커뮤니티 *res,
              const char *column_name);

42437_42498

주어진 이름은 SQL 명령에서 식별자처럼 취급됩니다. 즉, 두 번 인용되지 않으면 다운 케이스가 있습니다. 예를 들어, 주어진 a SQL 명령에서 생성 된 쿼리 결과 :

1을 foo로 선택하고, 2로 "bar";

결과가 있습니다 :

pqfname (res, 0)foopqfname (res, 1)barpqfnumber (res, "foo")0pqfnumber (res, "foo")0pqfnumber (res, "bar")-1pqfnumber (res, "\"bar \ "")1
pqftable

주어진 열이 있었던 테이블의 OID를 반환합니다. 가져 왔습니다. 열 번호는 0에서 시작합니다.

OID pqftable (const 토토 커뮤니티 *res,
             int column_number);

Invalidoid열이면 반환됩니다 숫자가 범위를 벗어나거나 지정된 열이 간단하지 않은 경우 테이블 열에 대한 참조 또는 Pre-3.0 프로토콜을 사용할 때. 너 시스템 테이블을 쿼리 할 수 ​​있습니다PG_CLASSTO 정확히 어떤 테이블이 참조되는지 결정합니다.

유형OID그리고 상수Invalidoid포함 할 때 정의됩니다libpq헤더 파일. 그들은 둘 다 할 것입니다 정수 유형이 되십시오.

pqftablecol

열의 열 번호 (테이블 내)를 반환합니다. 지정된 쿼리 결과 열을 구성합니다. Query-Result 열 숫자는 0에서 시작하지만 테이블 열에는 0이 아닌 숫자가 있습니다.

int pqftablecol (const 토토 커뮤니티 *res,
                int column_number);

열 번호가 범위를 벗어난 경우 또는 지정된 열은 테이블 열에 대한 간단한 참조가 아닙니다. Pre-3.0 프로토콜을 사용할 때.

pqfformat

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

int pqfformat (const 토토 커뮤니티 *res,
              int column_number);

형식 코드 0은 텍스트 데이터 표현을 나타냅니다 형식 코드 1은 이진 표현을 나타냅니다. (다른 코드입니다 미래 정의를 위해 예약.)

pqftype

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

OID PQFTYPE (const 토토 커뮤니티 *res,
            int column_number);

시스템 테이블을 쿼리 할 수 ​​있습니다PG_TYPE다양한 데이터 유형의 이름과 속성을 얻습니다. 그만큼OID45611_45666SRC/포함/카탈로그/PG_TYPE.H소스에서 나무.

PQFMOD

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

int pqfmod (const 토토 커뮤니티 *res,
           int column_number);

수정 자 값의 해석은 유형과 관련이 있습니다. 그들 일반적으로 정밀 또는 크기 한계를 나타냅니다. -1 값이 사용됩니다 표시"정보 없음". 대부분의 데이터 유형은 수정자를 사용하지 않으며 값은 다음과 같습니다. 항상 -1.

pqfsize

주어진 열 번호. 열 번호는 0에서 시작합니다.

int pqfsize (const 토토 커뮤니티 *res,
            int column_number);

pqfsize공간을 반환합니다 이 열에 데이터베이스 행에 할당되었습니다. 서버의 데이터 유형의 내부 표현 크기. (따라서 고객에게는별로 유용하지 않습니다.) 부정적인 값은 데이터 유형이 가변 길이임을 나타냅니다.

pqbinaryTuples

반환 1 인 경우 1토토 커뮤니티이진 데이터 및 텍스트 데이터가 포함 된 경우 0.

int pqbinaryTuples (const 토토 커뮤니티 *res);

이 토토 커뮤니티는 더 이상 사용되지 않습니다 (연결에 대한 사용을 제외하고 와 함께COPY) 하나의토토 커뮤니티텍스트 데이터를 포함하려면 다른 열 및 이진 데이터.pqfformat선호됩니다.pqbinaryTuples모든 열이있는 경우에만 반환합니다 결과는 이진 (형식 1)입니다.

pqgetValue

a의 단일 필드 값을 반환합니다토토 커뮤니티. 행 및 열 숫자는 0에서 시작합니다 발신자는 결과를 직접 자유롭게 해제해서는 안됩니다. 언제 해제 될 것입니다 관련토토 커뮤니티핸들은 전달PQCLEAR.

char *pqgetValue (const 토토 커뮤니티 *res,
                 int row_number,
                 int column_number);

텍스트 형식의 데이터의 경우pqgetValue는 무효 문자 문자열입니다 필드 값의 표현. 이진 형식의 데이터의 경우 값은 데이터 유형에 의해 결정된 이진 표현에 있습니다TypSendtypreceive토토 커뮤니티. (값은 실제로입니다 이 경우에도 제로 바이트가 이어 지지만 값이 내장을 포함 할 가능성이 있기 때문에 일반적으로 유용합니다. 널스.)

필드 값이 null이면 빈 문자열이 반환됩니다. 보다PQGETISNULLnull을 구별합니다 빈 스트링 값의 값.

포인터가 반환pqgetValue토토 커뮤니티구조. 하나는 수정해서는 안됩니다 데이터를 지적하고 다른 데이터를 명시 적으로 복사해야합니다. 수명을 지나서 사용하는 경우토토 커뮤니티구조 자체.

PQGETISNULL

널 값에 대한 필드를 테스트합니다. 행 및 열 번호는 시작됩니다 0.

int pqgetisnull (const 토토 커뮤니티 *res,
                int row_number,
                int column_number);

이 함수는 필드가 null이면 1이고 0이면 0을 반환합니다. 널 값이 아닌 값이 포함되어 있습니다. (pqgetValuea 널 필드를위한 널 포인터.)

pqgetLength

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

int pqgetLength (const 토토 커뮤니티 *res,
                int row_number,
                int column_number);

이것은 특정 데이터 값의 실제 데이터 길이입니다. 즉, 객체의 크기는pqgetValue. 텍스트 데이터 형식의 경우 동일합니다 처럼strlen (). 이진 형식의 경우 필수 정보입니다. 하나는not의존pqfsize실제 데이터 길이를 얻으려면

PQNPARAMS

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

int pqnparams (const 토토 커뮤니티 *res);

이 기능은 결과를 검사 할 때만 유용합니다.PQDESCREPREPARED. 다른 유형의 경우 쿼리의 경우 0이 반환됩니다.

PQPARAMTYPE

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

OID PQPARAMTYPE (const 토토 커뮤니티 *res, int param_number);

이 기능은 결과를 검사 할 때만 유용합니다.PQDESCREPREPARED. 다른 유형의 경우 쿼리의 경우 0이 반환됩니다.

pqprint

모든 행을 인쇄하고 선택적으로 열 이름을 지정된 출력 스트림.

void pqprint (파일 *fout, / *출력 스트림 * /
             const 토토 커뮤니티 *res,
             const pqprintopt *po);
typedef struct

    PQBOOL 헤더;      / * 출력 필드 제목 및 행 카운트 인쇄 */
    pqbool 정렬;       / * 채우기 필드 정렬 */
    PQBOOL 표준;    / * Old Brain Dead 형식 */
    PQBOOL HTML3;       / * 출력 HTML 테이블 */
    PQBOOL 확장;    / * 테이블 확장 */
    PQBOOL 호출기;       / * 필요한 경우 출력을 위해 호출기를 사용하십시오 */
    char *fieldsep;   / * 필드 분리기 */
    char *tableopt;   / * HTML 테이블 요소의 속성 */
    char *캡션;    / * HTML 테이블 캡션 */
    char ** fieldname; / * 교체 필드 이름의 널리 터진 배열 */
 pqprintopt;

이 토토 커뮤니티는 이전에 사용되었습니다PSQLQuery 결과를 인쇄하려면 이것이 아니오입니다 더 오래 케이스. 모든 데이터가 텍스트에 있다고 가정합니다. 체재.

31.3.3. 다른 결과를 검색합니다 정보

이 기능은에서 다른 정보를 추출하는 데 사용됩니다.토토 커뮤니티개체.

pqcmdstatus

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

char *pqcmdstatus (토토 커뮤니티 *res);

일반적으로 이것은 명령의 이름 일 뿐이지 만 처리 된 행 수와 같은 추가 데이터를 포함하십시오. 그만큼 발신자는 결과를 직접 자유롭게 해제해서는 안됩니다. 언제 해제 될 것입니다 관련토토 커뮤니티핸들은 전달PQCLEAR.

pqcmdtuples

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

char *pqcmdtuples (토토 커뮤니티 *res);

이 함수는 행 수를 포함하는 문자열을 반환합니다. 의 영향SQL진술 생성 한토토 커뮤니티. 이것 함수는 a의 실행 후에 만 ​​사용할 수 있습니다.select, 테이블 작성, 삽입, 업데이트, 삭제, 움직임, Fetch, 또는COPY진술 또는 anexecute준비 Query가 포함 된 쿼리삽입, 업데이트또는삭제진술. 를 생성 한 명령이 있다면토토 커뮤니티다른 것이 었습니다.pqcmdtuples빈 문자열을 반환합니다. 발신자 반환 값을 직접 자유롭게하지 않아야합니다. 언제 해제 될 것입니다 관련토토 커뮤니티핸들은 전달PQCLEAR.

pqoidvalue

삽입 된 행의 OID를 반환합니다.SQL명령은삽입테이블에 정확히 하나의 행을 삽입했습니다 그것은 Oids가 있습니다. 또는 Aexecute의 준비 적절한 쿼리삽입진술. 그렇지 않으면이 함수가 반환됩니다Invalidoid. 이 기능도 반환됩니다Invalidoid테이블에 영향을받는 경우삽입명령문에는 포함되어 있지 않습니다 oids.

OID pqoidValue (const 토토 커뮤니티 *res);
pqoidstatus

이 기능은에 찬성하여 더 이상 사용되지 않습니다.pqoidvalue그리고 스레드 안전이 아닙니다. a 삽입 된 행의 Oid가있는 문자열,pqoidvalueOID 값을 반환합니다.

char *pqoidstatus (const 토토 커뮤니티 *res);

31.3.4. 포함을위한 도피 줄 SQL 명령

PQescapeliteral
char *pqescapeliteral (pgconn *conn, const char *str, size_t 길이);

PQESCAPELITERAL문자열을 이사합니다 SQL 명령 내에서 사용합니다. 데이터를 삽입 할 때 유용합니다 SQL 명령의 문자 상수로서의 값. 특정 캐릭터 (예 : 인용문 및 백 슬래시)를 방지하기 위해 탈출해야합니다. SQL 파서에 의해 특별히 해석되는 것입니다.PQescapeliteral이 작업을 수행합니다.

PQESCAPELITERAL탈출 한 사람을 반환합니다 의 버전str메모리의 매개 변수 할당malloc (). 이 기억 를 사용하여 해방되어야합니다.pqfreemem ()결과가 더 이상 필요하지 않은 경우. 종료 제로 바이트는 아닙니다 필수, 계산해서는 안됩니다길이. (종료 제로 바이트가 발견되는 경우 전에길이바이트가 처리 됨,PQESCAPELITERAL0에서 멈 춥니 다. 그러므로 행동은 오히려Strncpy.) 리턴 문자열은 모두 특별합니다 문자가 교체하여에 의해 올바르게 처리 될 수 있도록 대체되었습니다.PostgreSQL문자열 리터럴 파서. 종료 제로 바이트도 추가됩니다. 해야 할 단일 인용문 서라운드PostgreSQL문자열 리터럴은 결과 문자열에 포함됩니다.

on Error,PQESCAPELITERAL반환NULL및 적절한 메시지가 저장됩니다 그만큼conn개체.

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

데이터 값은 별도의 매개 변수로 전달됩니다PQEXECPARAMS또는 그 형제 루틴.

PQESCAPEINDIFIER
char *pqescapeidentifier (pgconn *conn, const char *str, size_t 길이);

PQESCAPEINDIFIER탈출 a 테이블, 열, 또는 SQL 식별자로 사용하기위한 문자열 기능 이름. 이것은 사용자가 제공 한 식별자가 할 때 유용합니다 그렇지 않으면 해석되지 않는 특수 문자가 포함되어 있습니다 SQL 파서의 식별자의 일부 또는 식별자시기 케이스가 있어야하는 대문자가 포함될 수 있습니다 보존.

PQESCAPEINDIFIER반환 a 의 버전str매개 변수는 메모리의 SQL 식별자와 함께 할당 된malloc (). 이 메모리는를 사용하여 해제되어야합니다.​​pqfreemem ()결과가 아니오 인 경우 더 오래 필요합니다. 종료 제로 바이트는 필요하지 않으며해야합니다 계산되지 않음길이. (만약 a 제로 바이트 종단은 전에 찾을 수 있습니다길이바이트가 처리 됨,PQESCAPEINDIFIER0에서 멈 춥니 다. 그만큼 따라서 행동은 오히려Strncpy.) 리턴 문자열은 모두 특별합니다 캐릭터가 SQL로 올바르게 처리되도록 교체했습니다. 식별자. 종료 제로 바이트도 추가됩니다. 반환 문자열도 이중 인용문으로 둘러싸여 있습니다.

on Error,PQESCAPEINDIFIER반환NULL그리고 적절한 메시지는입니다 에 저장conn개체.

팁 :SQL 주입을 방지하기 위해 문자열 리터럴과 마찬가지로 공격, SQL 식별자는받을 때 피해야합니다. 신뢰할 수없는 출처에서.

PQESCAPESTRINGCONN
SIZE_T PQESCAPESTRINGCONN (PGCONN *CONN,
                          char *to, const char *from, size_t 길이,
                          int *error);

PQESCAPESTRINGCONN문자열을 이사합니다 리터럴, 아주 좋아요PQESCAPELITERAL. 같지 않은PQESCAPELITERAL, 발신자는입니다 적절한 크기의 버퍼를 제공합니다. 뿐만 아니라,PQESCAPESTRINGCONN주변을 둘러싼 단일 따옴표를 생성하지 않음PostgreSQL문자 리터럴; 그들은해야합니다 SQL 명령에 결과가 삽입되어 제공됩니다. 그만큼 매개 변수From첫 번째를 가리 킵니다 탈출 할 문자열의 문자, 그리고길이매개 변수는 이것에서 바이트 수를 제공합니다 끈. 종료 제로 바이트는 필요하지 않으며 계산길이. (종료되는 경우 제로 바이트는 이전에 발견되었습니다길이바이트 처리됩니다.PQESCAPESTRINGCONN0에서 멈 춥니 다. 그러므로 행동은 오히려strncpy.)to적어도 하나 이상의 바이트를 보관할 수있는 버퍼를 가리 킵니다. 값의 두 배길이, 그렇지 않으면 행동은 정의되지 않습니다. 행동이 마찬가지로 행동이 정의되지 않습니다toandFrom문자열 중첩.

오류매개 변수는NULL,*오류는 성공시 0으로 설정되어 오류가 발생하지 않습니다. 현재 유일한 것 가능한 오류 조건에는 유효하지 않은 멀티 바이트 인코딩이 포함됩니다 소스 문자열. 출력 문자열은 여전히 ​​오류에서 생성됩니다 서버가 기형으로 거부 할 것으로 예상 될 수 있습니다. ~에 오류, 적절한 메시지가에 저장됩니다.conn객체, 여부오류isNULL.

PQESCAPESTRINGCONN반환합니다 작성된 바이트 수to종료 제로 바이트 포함.

PQESCAPESTRING

PQescapestring나이가 많고 의 더 이상 사용되지 않는 버전PQESCAPESTRINGCONN.

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

유일한 차이점PQESCAPESTRINGCONNPQescapestring취하지 않습니다pgconn​​또는오류매개 변수. 이 때문에 동작을 조정할 수 없습니다 연결 속성 (예 : 문자 인코딩)에 따라 따라서잘못된 결과. 또한 오류를보고 할 방법이 없습니다 정황.

PQESCAPESTRING안전하게 사용할 수 있습니다 하나만 작동하는 클라이언트 프로그램에서PostgreSQL한 번에 연결 (이 경우 알아야 할 것이 무엇인지 알 수 있습니다"뒤에 장면 "). 다른 상황에서는 보안 위험이며 에 찬성하여 피해야합니다PQESCAPESTRINGCONN.

PQESCAPEBYTEACONN

유형과 함께 SQL 명령 내에서 사용하기 위해 이진 데이터를 빠져 나갑니다BYTEA. 와 마찬가지로PQESCAPESTRINGCONN, 이것은 다음에만 사용됩니다 SQL 명령 문자열에 데이터를 직접 삽입합니다.

부호없는 char *pqescapebyteaconn (pgconn *conn,
                                 서명되지 않은 char *에서,
                                 size_t from_length,
                                 size_t *to_length);

A의 일부로 사용될 때 특정 바이트 값을 피해야합니다BYTEA문자 그대로SQL진술.PQESCAPEBYTEACONN16 진수를 사용하여 바이트를 이스케이프합니다 인코딩 또는 백 슬래시 탈출. 보다섹션 8.4자세한 내용은

theFrom매개 변수가 탈출 할 문자열의 첫 바이트와from_length매개 변수는 바이트 수를 제공합니다 이 바이너리 스트링. (종단 제로 바이트는 필요하지 않습니다 계산하지도 않았다.)to_length매개 변수 결과적인 탈출 된 문자열을 보유 할 변수를 가리 킵니다. 길이. 이 결과 문자열 길이에는 종단 0이 포함됩니다 결과의 바이트.

PQESCAPEBYTEACONN반환합니다 탈출 한 버전의From매개 변수 메모리에 이진 문자열이 할당malloc (). 이 메모리는를 사용하여 해제되어야합니다.pqfreemem ()결과가 아니오 인 경우 더 오래 필요합니다. 반환 문자열에는 모든 특수 문자가 있습니다 그들이 올바르게 처리 할 수 ​​있도록 교체PostgreSQL문자열 리터럴 파서 및BYTEA입력 토토 커뮤니티. 종료 제로 바이트 또한 추가됩니다. 주변을 둘러싼 단일 따옴표PostgreSQL문자 리터럴의 일부가 아닙니다 결과 문자열.

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

PQESCAPEBYTEA

PQESCAPEBYTEA나이가 많고 의 더 이상 사용되지 않는 버전66799_66818.

부호없는 char *pqescapebytea (const unsigned char *from,
                             size_t from_length,
                             size_t *to_length);

유일한 차이점PQESCAPEBYTEACONNPQESCAPEBYTEAapgconn매개 변수. 이 때문에PQESCAPEBYTEA클라이언트에서만 안전하게 사용할 수 있습니다 단일을 사용하는 프로그램PostgreSQL한 번에 연결 (이 경우 알아야 할 것이 무엇인지 알 수 있습니다"뒤에 장면 "). 그것잘못된 결과를 줘다중 사용 프로그램에 사용되는 경우 데이터베이스 연결 (사용PQESCAPEBYTEACONN그러한 경우).

PQUNESCAPEBYTEA

이진 데이터의 문자열 표현을 이진 데이터로 변환합니다. -의 반대PQESCAPEBYTEA. 이것 검색 할 때 필요합니다BYTEA텍스트의 데이터 형식이지만 이진 형식으로 검색 할 때는 그렇지 않습니다.

부호없는 char *pqunescapebytea (const unsigned char *from, size_t *to_length);

theFrom매개 변수는 문자열을 가리 킵니다 예를 들어에 의해 반환 될 수 있습니다pqgetValueA에 적용되는 시점BYTEA열.PQUNESCAPEBYTEA이 문자열을 변환합니다 이진 표현으로의 표현. 포인터를 반환합니다 와 함께 할당 된 버퍼에malloc (), 또는NULL오류가 발생하여 크기를 넣습니다 버퍼에서to_length. 결과는 있어야합니다 사용을 사용하여PQFREEMEM그렇지 않은 경우 더 오래 필요합니다.

이 변환은 정확히 반대가 아닙니다PQESCAPEBYTEA68908_68953"탈출"|pqgetValue. 특히 이것은 의미합니다 문자열 인용 고려 사항이 필요하지 않으므로 필요하지 않습니다. Apgconn매개 변수.