이 섹션은 시설에 대해 설명합니다PostgreSQL'slibpq토토 커뮤니티 인터페이스 라이브러리는 큰 객체에 액세스 할 수 있도록 제공합니다. 그만큼PostgreSQL큰 객체 토토 커뮤니티는 이후에 모델링됩니다.unix파일 시스템 토토 커뮤니티, 아날로그와 함께Open
, 읽기
, 쓰기
, lseek
등
이러한 함수를 사용한 모든 큰 토토 커뮤니티 조작필수대형 토토 커뮤니티 파일 설명자는 트랜잭션 기간에만 유효하므로 SQL 트랜잭션 블록 내에서 발생합니다.
이러한 함수 중 하나를 실행하는 동안 오류가 발생하면 함수는 불가능한 값, 일반적으로 0 또는 -1을 반환합니다. 오류를 설명하는 메시지는 연결 토토 커뮤니티에 저장되며로 검색 할 수 있습니다.PQERRORMESSAGE
.
이러한 기능을 사용하는 토토 커뮤니티 응용 프로그램에는 헤더 파일이 포함되어야합니다libpq/libpq-fs.h
libpq도서관.
LIBPQ 연결이 파이프 라인 모드에있는 동안 토토 커뮤니티 응용 프로그램은 이러한 기능을 사용할 수 없습니다.
OID LO_CREAT (PGCONN *CONN, Int MODE);
새로운 큰 토토 커뮤니티를 만듭니다. 리턴 값은 새로운 큰 토토 커뮤니티에 할당 된 OID입니다.Invalidoid
(0) 실패시.모드
사용하지 않고 무시됩니다PostgreSQL8.1; 그러나 이전 릴리스와의 뒤로 호환성을 위해서는로 설정하는 것이 가장 좋습니다.inv_read
, inv_write
또는inv_read
|
inv_write
. (이 상징적 상수는 헤더 파일에 정의됩니다libpq/libpq-fs.h
.)
예 :
inv_oid = lo_creat (conn, inv_read | inv_write);
oid lo_create (pgconn *conn, oid lobjid);
또한 새로운 큰 토토 커뮤니티를 만듭니다. 할당 할 OID는에 의해 지정할 수 있습니다.lobjid
; 그렇다면 해당 OID가 이미 큰 물체에 사용중인 경우 실패가 발생합니다. 만약에lobjid
isInvalidoid
(0) 그런 다음lo_create
사용하지 않은 OID를 할당합니다 (이것은와 동일한 동작입니다lo_creat
). 리턴 값은 새로운 큰 토토 커뮤니티에 할당 된 OID입니다.invalidoid
(0) 실패시.
lo_create
|PostgreSQL8.1; 이 기능이 이전 서버 버전에 대해 실행되면 실패하고 반환됩니다Invalidoid
.
예 :
inv_oid = lo_create (conn, destired_oid);
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
PostgreSQL8.4 및 사용lo_create
내부적으로 8.1에서 새로운 것; 이 기능이 8.0 또는 이전에 실행되면 실패하고 반환됩니다Invalidoid
.
int lo_export (pgconn *conn, oid lobjid, const char *filename);
thelobjid
인수는 내보내기에 큰 대상의 OID를 지정하고filename
인수 파일의 운영 체제 이름을 지정합니다. 파일은 서버가 아닌 토토 커뮤니티 인터페이스 라이브러리에서 작성합니다. 성공시 1 회 반환, -1 실패.
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
. 디스크립터는 현재 트랜잭션 기간에만 유효합니다. 실패시 -1이 반환됩니다.
서버는 현재 모드를 구별하지 않습니다inv_write
andinv_read
|
inv_write
: 두 경우 모두 설명자에서 읽을 수 있습니다. 그러나 이러한 모드와 사이에는 큰 차이가 있습니다.inv_read
혼자 : withinv_read
당신은 디스크립터에 쓸 수 없으며, 그 내용을 읽은 데이터는 트랜잭션시기에 큰 토토 커뮤니티의 내용을 반영합니다.lo_open
나중에이 거래 또는 기타 거래의 글에 관계없이 실행되었습니다. 서술자에서 읽은 독서inv_write
현재 거래에 대한 쓰기뿐만 아니라 다른 헌신적 인 거래의 모든 쓰기를 반영하는 데이터를 반환합니다. 이것은의 행동과 유사합니다반복 가능한 읽기
대Committed
일반 SQL의 거래 모드select
명령.
lo_open
select
큰 개체에 대해 권한이 없습니다.inv_write
지정되고업데이트
권한을 사용할 수 없습니다. (앞서서PostgreSQL11, 이러한 권한 검사는 디스크립터를 사용하여 첫 번째 실제 읽기 또는 쓰기 호출에서 수행되었습니다.) 이러한 권한 검사는를 사용하여 비활성화 할 수 있습니다.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
. 실제로, 어쨌든 최대 몇 메가 바이트의 덩어리로 데이터를 전송하는 것이 가장 좋습니다.
큰 객체 디스크립터와 관련된 현재 읽기 또는 쓰기 위치를 변경하려면
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
, 그러나 그것은 수락 할 수 있습니다오프셋
2GB보다 큰 및/또는 2GB보다 큰 결과를 제공합니다. 참고lo_lseek
새 위치 포토토 커뮤니티가 2GB보다 큰 경우 실패합니다.
LO_LSEEK64
새로운PostgreSQL9.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
PostgreSQL9.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
PostgreSQL8.3; 이 함수가 이전 서버 버전에 대해 실행되면 실패하고 -1. 반환됩니다.
lo_truncate64
|PostgreSQL9.3; 이 함수가 이전 서버 버전에 대해 실행되면 실패하고 -1. 반환됩니다.
int lo_close (pgconn *conn, int fd);
여기서FD
lo_open
. 성공에,lo_close
0을 반환합니다. 오류시 반환 값은 -1입니다.
트랜잭션이 끝날 때 열려있는 대형 토토 커뮤니티 설명자는 자동으로 닫힙니다.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면