이 문서는 지원되지 않는 버전의 스포츠 토토을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다스포츠 토토 베트맨 : 문서 : 17 : 33.3. 스포츠 토토 베트맨 인터페이스버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

32.3. 클라이언트 인터페이스

이 섹션은 시설에 대해 설명합니다스포츠 토토'slibpq클라이언트 인터페이스 라이브러리가 제공합니다 큰 물체에 액세스합니다. 그만큼스포츠 토토큰 객체 인터페이스가 모델링되었습니다 이후unix파일 시스템 인터페이스, 아날로그가있는Open, 읽기, 쓰기, lseek, 등.

이러한 함수를 사용한 모든 큰 객체 조작필수SQL 내에서 발생합니다 큰 객체 파일 설명자는 단지 트랜잭션 블록입니다 거래 기간 동안 유효합니다.

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

이러한 기능을 사용하는 클라이언트 응용 프로그램에는 다음을 포함해야합니다 헤더 파일libpq/libpq-fs.h및 링크 와 함께libpq도서관.

32.3.1. 큰 개체 생성

함수

OID LO_CREAT (PGCONN *CONN, Int MODE);

새로운 큰 객체를 만듭니다. 반환 값은 OID입니다 새로운 큰 대상에 할당 또는Invalidoid(0) 실패시.모드사용되지 않고 무시됩니다스포츠 토토8.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스포츠 토토8.1; 이 기능이라면 이전 서버 버전에 대해 실행되면 실패하고 반환됩니다Invalidoid.

예 :

inv_oid = lo_create (conn, desired_oid);

32.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.

32.3.3. 큰 개체 내보내기

큰 오브젝트를 운영 체제 파일로 내보내려면 전화

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

thelobjid인수는 OID를 지정합니다 내보내기위한 큰 대상의filename인수 운영 체제를 지정합니다 파일의 이름. 파일은 클라이언트가 작성합니다 서버가 아닌 인터페이스 라이브러리. 성공시 1 회 반환, -1 on 실패.

32.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. 설명자는 만 유효합니다 현재 거래 기간. 실패시 -1입니다 반품.

서버는 현재 모드를 구별하지 않습니다inv_writeandinv_read | inv_write: 당신은에서 읽을 수 있습니다 두 경우 모두 설명자. 그러나 중요한 것이 있습니다 이 모드의 차이와inv_read혼자 : withinv_read당신은 쓸 수 없습니다 디스크립터 및 데이터에서 읽은 데이터는 내용을 반영합니다. 트랜잭션 스냅 샷 당시 큰 객체의 활성화되었을 때lo_open실행되었습니다. 나중에이 거래 또는 다른 거래에 의해 쓰여지더라도. 독서 설명 자에서에서inv_write다른 헌신의 모든 쓰기를 반영하는 데이터를 반환합니다 거래뿐만 아니라 현재 거래에 대한 쓰기. 이것은 행동과 유사반복 가능한 읽기versusCommitted 읽기거래 모드 평범한 SQLselect명령.

예 :

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

32.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. ~ 안에 연습, 최대 몇 개의 덩어리로 데이터를 전송하는 것이 가장 좋습니다. 어쨌든 메가 바이트.

19488_19530

함수

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

최대 읽기Len큰 바이트 객체 설명자FDintobuf(크기 여야합니다Len). 그만큼FD인수 이전에 의해 반환되었을 것입니다.lo_open. 실제로 읽은 바이트의 수는입니다 반환; 이것은보다 작을 것입니다.Lenif 큰 물체의 끝이 먼저 도달합니다. an의 경우 오류, 반환 값은 -1입니다.

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

32.3.7. 추구합니다 큰 물체

와 관련된 현재 읽기 또는 쓰기 위치를 변경하려면 큰 객체 설명자, Call

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

이 함수는 현재 위치 포인터를 크게 이동합니다. 식별 된 객체 설명자FDTO 에 의해 지정된 새로운 위치오프셋. 에 대한 유효한 값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스포츠 토토9.3. 이 기능이라면 이전 서버 버전에 대해 실행되면 실패하고 반환됩니다. -1.

32.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.

32.3.9. 큰 대상을 잘라

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

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

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

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

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

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

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

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

lo_truncate스포츠 토토8.3; 이 기능이라면 이전 서버 버전에 대해 실행되면 실패하고 반환됩니다. -1.

lo_truncate64|스포츠 토토9.3; 이 기능이라면 이전 서버 버전에 대해 실행되면 실패하고 반환됩니다. -1.

32.3.10. 폐쇄 큰 객체 디스크립터

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

int lo_close (pgconn *conn, int fd);

여기서FD큰 객체 설명 자입니다 반품lo_open. 성공에,lo_close0을 반환합니다. 오류가 발생하면 반환 값은 -1입니다.

끝에 열려있는 대형 객체 설명자 거래가 자동으로 닫힙니다.

32.3.11. 큰 물체 제거

데이터베이스에서 큰 객체를 제거하려면 전화

int lo_unlink (pgconn *conn, oid lobjid);

thelobjid인수는 OID를 지정합니다 제거 할 큰 물체의. 성공하면 1, -1 on을 반환합니다 실패.