젠 토토 : 문서 : 9.6 : 젠 토토 | |||
---|---|---|---|
스포츠 토토 베트맨 : 문서 : 9.6 : 스포츠 토토 베트맨 기능 | 롤 토토 : 문서 : 9.6 : 큰 개체 | 제 33 장. 큰 물체 | 윈 토토 : 문서 : 9.6 : 서버 측 기능 |
이 섹션은 시설에 대해 설명합니다postgresql'slibpq토토 사이트 추천 인터페이스 라이브러리는 큰 객체에 액세스 할 수 있도록 제공합니다. 그만큼PostgreSQL큰 객체 토토 사이트 추천는 이후에 모델링됩니다.unix파일 시스템 토토 사이트 추천, 아날로그가 포함 된Open
, 읽기
, 쓰기
, lseek
등
이러한 함수를 사용한 모든 큰 객체 조작꼭대형 객체 파일 설명자는 트랜잭션 기간에만 유효하므로 SQL 트랜잭션 블록 내에서 발생합니다.
이러한 함수 중 하나를 실행하는 동안 오류가 발생하면 함수는 불가능한 값, 일반적으로 0 또는 -1을 반환합니다. 오류를 설명하는 메시지는 연결 객체에 저장되며로 검색 할 수 있습니다.PQERRORMESSAGE
.
이러한 기능을 사용하는 토토 사이트 추천 응용 프로그램에는 헤더 파일이 포함되어야합니다libpq/libpq-fs.h와 링크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가 이미 큰 물체에 사용중인 경우 실패가 발생합니다. 만약에lobjidisInvalidoid(0) 그런 다음lo_create
사용하지 않은 OID를 할당합니다 (이것은와 동일한 동작입니다lo_creat
). 리턴 값은 새로운 큰 객체에 할당 된 OID입니다.Invalidoid(0) 실패시.
lo_create
PostgreSQL8.1; 이 기능이 이전 서버 버전에 대해 실행되면 실패하고 반환됩니다Invalidoid.
예 :
inv_oid = lo_create (conn, desired_oid);
운영 체제 파일을 큰 오브젝트로 가져 오려면 전화
oid lo_import (pgconn *conn, const 토토 사이트 추천ar *filename);
filename큰 오브젝트로 가져올 파일의 운영 체제 이름을 지정합니다. 리턴 값은 새로운 큰 객체에 할당 된 OID입니다.invalidoid(0) 실패시. 파일은 서버가 아닌 클라이언트 인터페이스 라이브러리에서 읽습니다. 따라서 클라이언트 파일 시스템에 존재하고 클라이언트 응용 프로그램에서 읽을 수 있어야합니다.
함수
OID LO_IMPORT_WITH_OID (PGCONN *CONN, CONST 토토 사이트 추천ar *Filename, Oid Lobjid);
또한 새로운 큰 객체를 가져옵니다. 할당 할 OID는에 의해 지정할 수 있습니다.lobjid; 그렇다면 해당 OID가 이미 큰 물체에 사용중인 경우 실패가 발생합니다. 만약에lobjidisInvalidoid(0) 그런 다음lo_import_with_oid
사용하지 않은 OID를 할당합니다 (이것은와 동일한 동작입니다lo_import
). 리턴 값은 새로운 큰 객체에 할당 된 OID입니다.Invalidoid(제로) 실패시.
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및inv_read | inv_write: 두 경우 모두 설명자에서 읽을 수 있습니다. 그러나 이러한 모드와 사이에는 큰 차이가 있습니다.inv_read혼자 : withinv_read당신은 디스크립터에 쓸 수 없으며,이를 읽은 데이터는 트랜잭션 스냅 샷 시점에 큰 객체의 내용을 반영합니다lo_open
나중에이 거래 또는 기타 거래의 글에 관계없이 실행되었습니다. 서술자에서 읽은 독서inv_write현재 거래에 대한 쓰기뿐만 아니라 다른 커밋 된 거래의 모든 쓰기를 반영하는 데이터를 반환합니다. 이것은의 행동과 유사합니다반복 가능한 읽기versusCommitted 읽기일반 SQL의 거래 모드select명령.
예 :
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큰 객체 디스크립터의 바이트FDinbuf(크기 여야합니다Len). 그만큼FD인수는 이전에 의해 반환되었을 것입니다lo_open
. 실제로 읽은 바이트 수는 반환됩니다. 이것은보다 작을 것입니다.Len큰 객체의 끝이 먼저 도달하면. 오류가 발생하면 반환 값은 -1입니다.
Len매개 변수는로 선언됩니다.size_t,이 함수는보다 큰 길이 값을 거부합니다.int_max. 실제로, 어쨌든 최대 몇 메가 바이트의 덩어리로 데이터를 전송하는 것이 가장 좋습니다.
큰 객체 디스크립터와 관련된 현재 읽기 또는 쓰기 위치를 변경하려면 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
, 그러나 그것은 수락 할 수 있습니다오프셋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를 받아 들일 수 있습니다.Len2GB를 초과하는 값
lo_truncate
PostgreSQL8.3; 이 함수가 이전 서버 버전에 대해 실행되면 실패하고 -1. 반환됩니다.
lo_truncate64
새로운PostgreSQL9.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