33.3. 범퍼카 토토 인터페이스#

이 섹션은 시설에 대해 설명합니다범퍼카 토토'slibpq범퍼카 토토 인터페이스 라이브러리는 큰 객체에 액세스 할 수 있도록 제공합니다. 그만큼범퍼카 토토큰 객체 인터페이스는 이후에 모델링됩니다.unix파일 시스템 인터페이스, 아날로그가 포함 된Open, 읽기, 쓰기, lseek

이러한 함수를 사용한 모든 큰 객체 조작필수큰 객체 파일 설명자는 트랜잭션 기간에만 유효하므로 SQL 트랜잭션 블록 내에서 발생합니다. 를 포함한 작업 쓰기lo_openwithinv_write모드, 읽기 전용 트랜잭션에서는 허용되지 않습니다.

이러한 함수 중 하나를 실행하는 동안 오류가 발생하면 함수는 다른 불가능한 값, 일반적으로 0 또는 -1을 반환합니다. 오류를 설명하는 메시지는 연결 객체에 저장되며로 검색 할 수 있습니다.PQERRORMESSAGE .

이러한 기능을 사용하는 범퍼카 토토 응용 프로그램에는 헤더 파일이 포함되어야합니다libpq/libpq-fs.hlibpq도서관.

LIBPQ 연결이 파이프 라인 모드에있는 동안 범퍼카 토토 응용 프로그램은 이러한 기능을 사용할 수 없습니다.

33.3.1. 큰 개체 생성#

함수

oid lo_create (pgconn *conn, oid lobjid);

새로운 큰 객체를 만듭니다. 할당 할 OID는에 의해 지정할 수 있습니다.lobjid; 그렇다면 해당 OID가 이미 큰 물체에 사용중인 경우 실패가 발생합니다.lobjidisInvalidoid(0) 그런 다음lo_create사용하지 않은 OID를 할당합니다. 리턴 값은 새로운 큰 객체에 할당 된 OID입니다.Invalidoid(0) 실패시.

예 :

inv_oid = lo_create (conn, desired_oid);

이전 함수

OID lo_creat (pgconn *conn, int mode);

또한 새로운 큰 객체를 생성하여 항상 사용하지 않는 OID를 할당합니다. 리턴 값은 새로운 큰 객체에 할당 된 OID입니다.Invalidoid(0) 실패시.

in범퍼카 토토릴리스 8.1 이상,모드무시되므로lo_creat정확히 동일합니다lo_create제로 두 번째 인수와 함께. 그러나 사용할 이유가 거의 없습니다lo_creat8.1 이상의 서버에서 작업하지 않는 한. 그러한 이전 서버에서 작업하려면 사용해야합니다lo_creatnotlo_create모드inv_read, inv_write또는inv_read | inv_write. (이 상징적 상수는 헤더 파일에 정의됩니다libpq/libpq-fs.h.)

예 :

inv_oid = lo_creat (conn, inv_read | inv_write);

33.3.2. 큰 개체 가져 오기#

운영 체제 파일을 큰 오브젝트로 가져 오려면 전화

oid lo_import (pgconn *conn, const char *filename);

filename큰 오브젝트로 가져올 파일의 운영 체제 이름을 지정합니다. 리턴 값은 새로운 큰 객체에 할당 된 OID입니다.Invalidoid(0) 실패시. 파일은 서버가 아닌 클라이언트 인터페이스 라이브러리에서 읽습니다.

함수

OID LO_IMPORT_WITH_OID (PGCONN *CONN, CONST Char *Filename, Oid Lobjid);

또한 새로운 큰 객체를 가져옵니다. 할당 할 OID는에 의해 지정할 수 있습니다.lobjid; 그렇다면 해당 OID가 이미 큰 물체에 사용중인 경우 실패가 발생합니다.lobjidisInvalidoid(0) 그런 다음lo_import_with_oid사용하지 않는 OID를 할당합니다 (이것은와 동일한 동작입니다lo_import). 리턴 값은 새로운 큰 객체에 할당 된 OID입니다.Invalidoid(0) 실패시.

lo_import_with_oid범퍼카 토토8.4 및 사용lo_create내부적으로 8.1에서 새로운 것; 이 기능이 8.0 또는 이전에 실행되면 실패하고 반환됩니다Invalidoid.

33.3.3. 큰 개체 내보내기#

대형 개체를 운영 체제 파일로 내보내려면 전화

int lo_export (pgconn *conn, oid lobjid, const char *filename);

thelobjid인수는 내보내기에 큰 오브젝트의 OID를 지정하고filename인수 파일의 운영 체제 이름을 지정합니다. 파일은 서버가 아닌 범퍼카 토토 인터페이스 라이브러리에서 작성합니다.

33.3.4. 기존의 큰 개체 열기#

읽기 또는 쓰기를위한 기존의 큰 물체를 열려면

int lo_open (pgconn *conn, oid lobjid, int mode);

thelobjid인수는 큰 물체의 OID를 열어야합니다. 그만큼모드비트 컨트롤 객체가 reading을 위해 열는지 여부 (inv_read), 쓰기 (inv_write) 또는 둘 다. (이 상징적 상수는 헤더 파일에 정의됩니다libpq/libpq-fs.h.) lo_open나중에 사용하기 위해 (음성) 큰 물체 디스크립터를 반환합니다lo_read, lo_write, lo_lseek, lo_lseek64, lo_tell, lo_tell64, lo_truncate, lo_truncate64lo_close. 디스크립터는 현재 트랜잭션 기간에만 유효합니다.

서버는 현재 모드를 구별하지 않습니다inv_writeandinv_read | inv_write: 두 경우 모두 설명자에서 읽을 수 있습니다. 그러나 이러한 모드와 사이에는 큰 차이가 있습니다.inv_read혼자 : withinv_read당신은 디스크립터에 쓸 수 없으며,이를 읽은 데이터는 트랜잭션시기에 활성화 된 트랜잭션 스냅 샷 시점에 큰 객체의 내용을 반영합니다lo_open나중에이 거래 또는 기타 거래의 글에 관계없이 실행되었습니다. 서술자에서 읽은 독서inv_write현재 거래에 대한 쓰기뿐만 아니라 다른 커밋 된 거래의 모든 쓰기를 반영하는 데이터를 반환합니다. 이것은의 행동과 유사합니다반복 가능한 읽기versusCommitted일반 SQL에 대한 트랜잭션 모드select명령.

lo_openifselect큰 개체에 대해 권한이 없습니다.inv_write지정되고업데이트특권을 사용할 수 없습니다. (앞서서범퍼카 토토11, 이러한 권한 검사는 디스크립터를 사용하여 첫 번째 실제 읽기 또는 쓰기 호출에서 수행되었습니다.) 이러한 권한 검사는를 사용하여 비활성화 할 수 있습니다.lo_compat_privileges런타임 매개 변수.

예 :

inv_fd = lo_open (conn, inv_oid, inv_read | inv_write);

33.3.5. 큰 개체에 데이터 작성#

함수

int lo_write (pgconn *conn, int fd, const char *buf, size_t len);

쓰기Len바이트에서buf(크기 여야합니다Len) 큰 객체 설명 자에게FD. 그만큼FD인수는 이전에 의해 반환되었을 것입니다lo_open. 실제로 작성된 바이트 수는 반환됩니다 (현재 구현에서는 항상 동일합니다Len오류가없는 한). 오류가 발생하면 반환 값은 -1입니다.

비록Len매개 변수는로 선언됩니다.size_t,이 함수는보다 큰 길이 값을 거부합니다.int_max. 실제로, 어쨌든 최대 몇 메가 바이트의 덩어리로 데이터를 전송하는 것이 가장 좋습니다.

33.3.6. 큰 개체에서 데이터 읽기#

함수

int lo_read (pgconn *conn, int fd, char *buf, size_t len);

최대 읽기Len큰 객체 디스크립터의 바이트FDintobuf(크기 여야합니다Len). 그만큼FD인수는 이전에 의해 반환되었을 것입니다lo_open. 실제로 읽은 바이트 수는 반환됩니다.Len큰 물체의 끝이 먼저 도달하면. 오류가 발생하면 반환 값은 -1입니다.

비록Len매개 변수는로 선언됩니다.size_t,이 함수는보다 큰 길이 값을 거부합니다.int_max. 실제로, 어쨌든 최대 몇 메가 바이트의 덩어리로 데이터를 전송하는 것이 가장 좋습니다.

33.3.7. 큰 대상을 찾는#

큰 객체 디스크립터와 관련된 현재 읽기 또는 쓰기 위치를 변경하려면 Call

int lo_lseek (pgconn *conn, int fd, int offset, int whence);

이 함수는 대형 개체 디스크립터의 현재 위치 포인터를 이동합니다.FD오프셋. 에 대한 유효한 값WHENCEareseek_set(개체 시작에서 찾으십시오),seek_cur(현재 위치에서 찾으십시오) 및seek_end(객체 끝에서 찾으십시오). 리턴 값은 새로운 위치 포인터 또는 오류의 -1입니다.

크기가 2GB를 초과 할 수있는 큰 물체를 처리 할 때 대신 사용

pg_int64 lo_lseek64 (pgconn *conn, int fd, pg_int64 오프셋, int whence);

이 함수는와 동일한 동작을 가지고 있습니다.lo_lseek, 그러나 in을 받아 들일 수 있습니다오프셋2GB보다 큰 및/또는 2GB보다 큰 결과를 제공합니다. 참고lo_lseek새 위치 포인터가 2GB보다 큰 경우 실패합니다.

lo_lseek64범퍼카 토토9.3. 이 함수가 이전 서버 버전에 대해 실행되면 실패하고 -1. 반환됩니다.

33.3.8. 큰 대상의 찾기 위치 얻기#

큰 오브젝트 디스크립터의 현재 읽기 또는 쓰기 위치를 얻으려면

int lo_tell (pgconn *conn, int fd);

오류가 있으면 반환 값은 -1입니다.

크기가 2GB를 초과 할 수있는 큰 물체를 처리 할 때 대신 사용

pg_int64 lo_tell64 (pgconn *conn, int fd);

이 함수는와 동일한 동작을 가지고 있습니다.lo_tell이지만 2GB보다 큰 결과를 제공 할 수 있습니다. 참고lo_tell현재 읽기/쓰기 위치가 2GB보다 큰 경우 실패합니다.

lo_tell64범퍼카 토토9.3. 이 함수가 이전 서버 버전에 대해 실행되면 실패하고 -1. 반환됩니다.

33.3.9. 큰 대상을 잘라#

주어진 길이에 큰 물체를 자르려면 전화

int lo_truncate (pgconn *conn, int fd, size_t len);

이 함수는 큰 객체 디스크립터를 잘라냅니다FD길이Len. 그만큼FD인수는 이전에 의해 반환되었을 것입니다lo_open. 만약에Len는 큰 물체의 현재 길이보다 크고, 큰 물체는 널 바이트 ( '\ 0')로 지정된 길이로 확장됩니다. 성공에,lo_truncate0을 반환합니다. 오류시 반환 값은 -1입니다.

디스크립터와 관련된 읽기/쓰기 위치FD변경되지 않았습니다.

비록Len매개 변수는로 선언됩니다.size_t, lo_truncate보다 큰 길이 값을 거부합니다int_max.

크기가 2GB를 초과 할 수있는 큰 물체를 처리 할 때 대신 사용

int lo_truncate64 (pgconn *conn, int fd, pg_int64 len);

이 함수는와 동일한 동작을 가지고 있습니다.lo_truncate, 그러나 a를 받아 들일 수 있습니다.Len2GB를 초과하는 값

lo_truncate범퍼카 토토8.3; 이 함수가 이전 서버 버전에 대해 실행되면 실패하고 -1. 반환됩니다.

lo_truncate64범퍼카 토토9.3; 이 함수가 이전 서버 버전에 대해 실행되면 실패하고 -1. 반환됩니다.

33.3.10. 큰 객체 디스크립터 닫기#

큰 객체 설명자는 호출하여 닫을 수 있습니다

int lo_close (pgconn *conn, int fd);

여기서FD|lo_open. 성공에,lo_close0을 반환합니다. 오류시 반환 값은 -1입니다.

트랜잭션이 끝날 때 열려있는 대형 객체 설명자는 자동으로 닫힙니다.

정정 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다.이 양식문서 문제를보고하려면