이 섹션은 시설에 대해 설명합니다범퍼카 토토'slibpq범퍼카 토토 인터페이스 라이브러리는 큰 객체에 액세스 할 수 있도록 제공합니다. 그만큼범퍼카 토토큰 객체 인터페이스는 이후에 모델링됩니다.unix파일 시스템 인터페이스, 아날로그가 포함 된Open
, 읽기
, 쓰기
, lseek
등
이러한 함수를 사용한 모든 큰 객체 조작필수큰 객체 파일 설명자는 트랜잭션 기간에만 유효하므로 SQL 트랜잭션 블록 내에서 발생합니다. 를 포함한 작업 쓰기lo_open
withinv_write
모드, 읽기 전용 트랜잭션에서는 허용되지 않습니다.
이러한 함수 중 하나를 실행하는 동안 오류가 발생하면 함수는 다른 불가능한 값, 일반적으로 0 또는 -1을 반환합니다. 오류를 설명하는 메시지는 연결 객체에 저장되며로 검색 할 수 있습니다.PQERRORMESSAGE
.
이러한 기능을 사용하는 범퍼카 토토 응용 프로그램에는 헤더 파일이 포함되어야합니다libpq/libpq-fs.h
libpq도서관.
LIBPQ 연결이 파이프 라인 모드에있는 동안 범퍼카 토토 응용 프로그램은 이러한 기능을 사용할 수 없습니다.
oid lo_create (pgconn *conn, oid lobjid);
새로운 큰 객체를 만듭니다. 할당 할 OID는에 의해 지정할 수 있습니다.lobjid
; 그렇다면 해당 OID가 이미 큰 물체에 사용중인 경우 실패가 발생합니다.lobjid
isInvalidoid
(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_creat
8.1 이상의 서버에서 작업하지 않는 한. 그러한 이전 서버에서 작업하려면 사용해야합니다lo_creat
notlo_create
모드
inv_read
, inv_write
또는inv_read
|
inv_write
. (이 상징적 상수는 헤더 파일에 정의됩니다libpq/libpq-fs.h
.)
예 :
inv_oid = lo_creat (conn, inv_read | inv_write);
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가 이미 큰 물체에 사용중인 경우 실패가 발생합니다.lobjid
isInvalidoid
(0) 그런 다음lo_import_with_oid
사용하지 않는 OID를 할당합니다 (이것은와 동일한 동작입니다lo_import
). 리턴 값은 새로운 큰 객체에 할당 된 OID입니다.Invalidoid
(0) 실패시.
lo_import_with_oid
범퍼카 토토8.4 및 사용lo_create
내부적으로 8.1에서 새로운 것; 이 기능이 8.0 또는 이전에 실행되면 실패하고 반환됩니다Invalidoid
.
int lo_export (pgconn *conn, oid lobjid, const char *filename);
thelobjid
인수는 내보내기에 큰 오브젝트의 OID를 지정하고filename
인수 파일의 운영 체제 이름을 지정합니다. 파일은 서버가 아닌 범퍼카 토토 인터페이스 라이브러리에서 작성합니다.
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_truncate64
및lo_close
. 디스크립터는 현재 트랜잭션 기간에만 유효합니다.
서버는 현재 모드를 구별하지 않습니다inv_write
andinv_read
|
inv_write
: 두 경우 모두 설명자에서 읽을 수 있습니다. 그러나 이러한 모드와 사이에는 큰 차이가 있습니다.inv_read
혼자 : withinv_read
당신은 디스크립터에 쓸 수 없으며,이를 읽은 데이터는 트랜잭션시기에 활성화 된 트랜잭션 스냅 샷 시점에 큰 객체의 내용을 반영합니다lo_open
나중에이 거래 또는 기타 거래의 글에 관계없이 실행되었습니다. 서술자에서 읽은 독서inv_write
현재 거래에 대한 쓰기뿐만 아니라 다른 커밋 된 거래의 모든 쓰기를 반영하는 데이터를 반환합니다. 이것은의 행동과 유사합니다반복 가능한 읽기
versusCommitted
일반 SQL에 대한 트랜잭션 모드select
명령.
lo_open
ifselect
큰 개체에 대해 권한이 없습니다.inv_write
지정되고업데이트
특권을 사용할 수 없습니다. (앞서서범퍼카 토토11, 이러한 권한 검사는 디스크립터를 사용하여 첫 번째 실제 읽기 또는 쓰기 호출에서 수행되었습니다.) 이러한 권한 검사는를 사용하여 비활성화 할 수 있습니다.lo_compat_privileges런타임 매개 변수.
예 :
inv_fd = lo_open (conn, inv_oid, inv_read | inv_write);
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
. 실제로, 어쨌든 최대 몇 메가 바이트의 덩어리로 데이터를 전송하는 것이 가장 좋습니다.
int lo_read (pgconn *conn, int fd, char *buf, size_t len);
최대 읽기Len
큰 객체 디스크립터의 바이트FD
intobuf
(크기 여야합니다Len
). 그만큼FD
인수는 이전에 의해 반환되었을 것입니다lo_open
. 실제로 읽은 바이트 수는 반환됩니다.Len
큰 물체의 끝이 먼저 도달하면. 오류가 발생하면 반환 값은 -1입니다.
비록Len
매개 변수는로 선언됩니다.size_t
,이 함수는보다 큰 길이 값을 거부합니다.int_max
. 실제로, 어쨌든 최대 몇 메가 바이트의 덩어리로 데이터를 전송하는 것이 가장 좋습니다.
큰 객체 디스크립터와 관련된 현재 읽기 또는 쓰기 위치를 변경하려면 Call
int lo_lseek (pgconn *conn, int fd, int offset, int whence);
이 함수는 대형 개체 디스크립터의 현재 위치 포인터를 이동합니다.FD
오프셋
. 에 대한 유효한 값WHENCE
areseek_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. 반환됩니다.
큰 오브젝트 디스크립터의 현재 읽기 또는 쓰기 위치를 얻으려면
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. 반환됩니다.
int lo_truncate (pgconn *conn, int fd, size_t len);
이 함수는 큰 객체 디스크립터를 잘라냅니다FD
길이Len
. 그만큼FD
인수는 이전에 의해 반환되었을 것입니다lo_open
. 만약에Len
는 큰 물체의 현재 길이보다 크고, 큰 물체는 널 바이트 ( '\ 0')로 지정된 길이로 확장됩니다. 성공에,lo_truncate
0을 반환합니다. 오류시 반환 값은 -1입니다.
디스크립터와 관련된 읽기/쓰기 위치FD
변경되지 않았습니다.
비록Len
매개 변수는로 선언됩니다.size_t
, lo_truncate
보다 큰 길이 값을 거부합니다int_max
.
크기가 2GB를 초과 할 수있는 큰 물체를 처리 할 때 대신 사용
int lo_truncate64 (pgconn *conn, int fd, pg_int64 len);
이 함수는와 동일한 동작을 가지고 있습니다.lo_truncate
, 그러나 a를 받아 들일 수 있습니다.Len
2GB를 초과하는 값
lo_truncate
범퍼카 토토8.3; 이 함수가 이전 서버 버전에 대해 실행되면 실패하고 -1. 반환됩니다.
lo_truncate64
범퍼카 토토9.3; 이 함수가 이전 서버 버전에 대해 실행되면 실패하고 -1. 반환됩니다.
int lo_close (pgconn *conn, int fd);
여기서FD
|lo_open
. 성공에,lo_close
0을 반환합니다. 오류시 반환 값은 -1입니다.
트랜잭션이 끝날 때 열려있는 대형 객체 설명자는 자동으로 닫힙니다.
int lo_unlink (pgconn *conn, oid lobjid);
thelobjid
인수는 제거 할 큰 물체의 OID를 지정합니다. 성공하면 1을 반환하고 -1은 실패시 -1
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다.이 양식문서 문제를보고하려면