35.3. 토토 커뮤니티 인터페이스

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

이러한 함수를 사용한 모든 큰 토토 커뮤니티 조작필수대형 토토 커뮤니티 파일 설명자는 트랜잭션 기간에만 유효하므로 SQL 트랜잭션 블록 내에서 발생합니다.

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

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

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

35.3.1. 큰 개체 생성

함수

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, destired_oid);

35.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_oidPostgreSQL8.4 및 사용lo_create내부적으로 8.1에서 새로운 것; 이 기능이 8.0 또는 이전에 실행되면 실패하고 반환됩니다Invalidoid.

35.3.3. 큰 개체 내보내기

큰 개체를 운영 체제 파일로 내보내려면

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

thelobjid인수는 내보내기에 큰 대상의 OID를 지정하고filename인수 파일의 운영 체제 이름을 지정합니다. 파일은 서버가 아닌 토토 커뮤니티 인터페이스 라이브러리에서 작성합니다. 성공시 1 회 반환, -1 실패.

35.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현재 거래에 대한 쓰기뿐만 아니라 다른 헌신적 인 거래의 모든 쓰기를 반영하는 데이터를 반환합니다. 이것은의 행동과 유사합니다반복 가능한 읽기Committed일반 SQL의 거래 모드select명령.

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

예 :

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

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

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

35.3.7. 큰 대상을 찾는

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

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. 반환됩니다.

35.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_tell64PostgreSQL9.3. 이 함수가 이전 서버 버전에 대해 실행되면 실패하고 -1. 반환됩니다.

35.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_truncatePostgreSQL8.3; 이 함수가 이전 서버 버전에 대해 실행되면 실패하고 -1. 반환됩니다.

lo_truncate64|PostgreSQL9.3; 이 함수가 이전 서버 버전에 대해 실행되면 실패하고 -1. 반환됩니다.

35.3.10. 큰 토토 커뮤니티 디스크립터 닫기

큰 토토 커뮤니티 설명자는 호출하여 닫을 수 있습니다

int lo_close (pgconn *conn, int fd);

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

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

정정 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면