이 문서는 지원되지 않는 스포츠 토토 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.스포츠 토토 베트맨 : 문서 : 17 : 33.3. 스포츠 토토 베트맨 인터페이스버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

32.3. 스포츠 토토 인터페이스

이 섹션에서는 다음과 같은 시설을 설명합니다.스포츠 토토libpq클라이언트 인터페이스 라이브러리는 다음을 제공합니다. 큰 개체에 액세스합니다.포스트그레SQL대형 객체 인터페이스가 모델링되었습니다. 이후에유닉스파일 시스템 인터페이스, 다음과 유사함열기, 읽기, 쓰기, lseek, 등

이 기능을 사용한 모든 대형 객체 조작반드시SQL 내에서 발생 대형 개체 파일 설명자는 트랜잭션 블록이므로 거래 기간 동안 유효합니다.

이 기능 중 하나를 실행하는 동안 오류가 발생하면, 함수는 다른 방법으로는 불가능한 값(일반적으로 0)을 반환합니다. 또는 -1. 오류를 설명하는 메시지가 연결에 저장됩니다. 객체이며 다음을 사용하여 검색할 수 있습니다.PQerrorMessage.

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

32.3.1. 대형 객체 생성

함수

Oid lo_creat(PGconn *conn, int 모드);

새 대형 개체를 생성합니다. 반환 값은 OID입니다. 새로운 대형 객체에 할당되거나InvalidOid실패 시 (0).모드현재 사용되지 않으며 무시됩니다.포스트그레SQL8.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(제로) 다음lo_create사용되지 않은 OID를 할당합니다(이것은 동일합니다) 다음과 같은 행동lo_creat). 반환 value는 새 대형 객체에 할당된 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);

파일 이름운영을 지정합니다. 대형 개체로 가져올 파일의 시스템 이름입니다. 는 반환 값은 새 대형 개체에 할당된 OID입니다. 또는InvalidOid14190_14376

함수

Oid lo_import_with_oid(PGconn *conn, const char *filename, Oid lobjId);

또한 새로운 대형 개체를 가져옵니다. 할당할 OID는 다음과 같습니다. 에 의해 지정됨lobjId; 그렇다면 실패 해당 OID가 일부 대형 개체에 이미 사용 중인 경우 발생합니다. 만일lobjIdisInvalidOid(제로) 그럼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);

lobjId인수는 OID를 지정합니다 내보낼 대형 객체 및파일 이름인수는 운영 체제를 지정합니다. 파일의 이름. 파일은 스포츠 토토에 의해 작성됩니다. 서버가 아닌 인터페이스 라이브러리. 성공하면 1을 반환하고 성공하면 -1을 반환합니다. 실패.

32.3.4. 열기 기존 대형 객체

읽거나 쓰기 위해 기존의 큰 개체를 열려면, 전화

int lo_open(PGconn *conn, Oid lobjId, int mode);

lobjId인수는 OID를 지정합니다. 큰 물체를 열어야 합니다.모드비트는 객체를 읽기 위해 열지 여부를 제어합니다(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_WRITE그리고INV_READ | INV_WRITE: 다음에서 읽을 수 있습니다. 두 경우 모두 설명자입니다. 그러나 중요한 것이 있습니다 이 모드의 차이점과INV_READ혼자: 함께INV_READ당신은 글을 쓸 수 없습니다 설명자와 그 설명자에서 읽은 데이터는 내용을 반영합니다. 트랜잭션 스냅샷 당시 대형 객체의 언제 활동했습니까?lo_open실행되었으며, 이 트랜잭션이나 다른 트랜잭션에 의한 나중에 쓰기와 관계없이. 독서 다음으로 열린 설명자에서INV_WRITE다른 커밋된 모든 쓰기를 반영하는 데이터를 반환합니다. 트랜잭션뿐만 아니라 현재 트랜잭션의 쓰기도 가능합니다. 이것은 의 행동과 유사합니다.반복 가능한 읽기읽어 커밋됨트랜잭션 모드 일반 SQL의 경우선택명령.

예:

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

32.3.6. 독서 대형 개체의 데이터

함수

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

최대 읽기len대형 바이트 객체 설명자fd속으로buf(크기가 같아야 함len).fd인수 이전에 반환되었음에 틀림없습니다.lo_open. 실제로 읽은 바이트 수는 다음과 같습니다. 반환; 이 값은 다음보다 작을 것입니다.len만약 대형 개체의 끝에 먼저 도달합니다. 다음과 같은 경우 오류, 반환 값은 -1입니다.

비록len매개변수는 다음과 같이 선언됨size_t, 이 함수는 거부합니다. 다음보다 큰 길이 값INT_MAX. 에서 실제로는 최대 몇 개의 덩어리로 데이터를 전송하는 것이 가장 좋습니다. 어쨌든 메가바이트입니다.

32.3.7. 찾고 있는 중 대형 객체

현재 읽기 또는 쓰기 위치를 변경하려면 대형 객체 설명자, 호출

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

이 기능은 현재 위치 포인터를 큰 위치로 이동시킵니다. 로 식별되는 객체 설명자fd에 다음으로 지정된 새 위치오프셋. 유효한 값은어디서아르SEEK_SET(개체 시작부터 탐색),SEEK_CUR(현재 위치에서 탐색) 및SEEK_END(객체 끝에서 탐색). 반환 값은 새 위치 포인터이거나 오류 시 -1입니다.

크기가 2GB를 초과할 수 있는 큰 개체를 처리할 때, 대신에 사용하세요

pg_int64 lo_lseek64(PGconn *conn, int fd, pg_int64 offset, int whence);

이 함수는 다음과 동일하게 동작합니다.lo_lseek, 하지만 허용할 수 있는 것은오프셋2GB보다 크거나 결과 전달 2GB보다 큽니다. 참고하세요lo_lseek새 위치 포인터가 다음보다 크면 실패합니다. 2GB.

lo_lseek64현재 최신임포스트그레SQL9.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인수는 다음에 의해 반환되어야 합니다. 이전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, 그러나 다음을 허용할 수 있습니다.len값이 2GB를 초과합니다.

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

lobjId인수는 OID를 지정합니다 제거할 대형 물체의 성공하면 1을 반환하고 성공하면 -1을 반환합니다. 실패.