34.3. 클라이언트 롤 토토

이 섹션에서는 다음과 같은 시설을 설명합니다.PostgreSQL'slibpq클라이언트 롤 토토 라이브러리는 대형 개체에 액세스하기 위해 제공됩니다.포스트그레SQL대형 개체 인터페이스는 다음을 모델로 합니다.유닉스파일 시스템 인터페이스, 다음과 유사함열기, 읽기, 쓰기, lseek

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

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

이러한 기능을 사용하는 클라이언트 애플리케이션은 헤더 파일을 포함해야 합니다libpq/libpq-fs.h그리고 다음과 연결libpq도서관.

34.3.1. 대형 롤 토토 생성

함수

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

새 대형 개체를 생성합니다. 반환 값은 새 대형 롤 토토에 할당된 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(제로) 다음lo_create사용되지 않은 OID를 할당합니다(이것은 다음과 동일한 동작입니다.lo_creat). 반환 값은 새 대형 객체에 할당된 OID입니다. 또는InvalidOid실패 시 (0).

lo_create현재 새로운 기능입니다포스트그레SQL8.1; 이 함수가 이전 서버 버전에 대해 실행되면 실패하고 반환됩니다.InvalidOid.

예:

inv_oid = lo_create(conn, Desired_oid);

34.3.2. 대형 개체 가져오기

운영 체제 파일을 대형 개체로 가져오려면 다음을 호출하세요.

Oid lo_import(PGconn *conn, const char *filename);

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

함수

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현재 새로운 기능입니다PostgreSQL8.4 및 용도lo_create내부적으로는 8.1의 새로운 기능입니다. 이 함수가 8.0 이전 버전에 대해 실행되면 실패하고 반환됩니다.InvalidOid.

34.3.3. 대형 개체 내보내기

대형 개체를 운영 체제 파일로 내보내려면 다음을 호출하세요.

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

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

34.3.4. 기존 대형 개체 열기

읽거나 쓰기 위해 기존의 큰 개체를 열려면 다음을 호출하세요.

int lo_open(PGconn *conn, Oid lobjId, int 모드);

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의 트랜잭션 모드선택명령.

lo_open다음의 경우 실패합니다선택대형 개체에는 권한을 사용할 수 없습니다. 또는 다음과 같은 경우INV_WRITE지정되었으며업데이트권한을 사용할 수 없습니다. (이전)포스트그레SQL11, 대신 이러한 권한 확인은 설명자를 사용한 첫 번째 실제 읽기 또는 쓰기 호출에서 수행되었습니다.) 이러한 권한 확인은 다음을 사용하여 비활성화할 수 있습니다.lo_compat_privileges런타임 매개변수.

예:

inv_fd = lo_open(conn, inv_oid, INV_READ|INV_WRITE);

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

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

34.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 오프셋, int whence);

이 함수는 다음과 동일한 동작을 가집니다.lo_lseek, 그러나 다음을 허용할 수 있습니다.오프셋2GB보다 크거나 2GB보다 큰 결과를 제공합니다. 참고하세요lo_lseek새 위치 포롤 토토가 2GB보다 크면 실패합니다.

lo_lseek64현재 새로운 기능입니다PostgreSQL9.3. 이 함수가 이전 서버 버전에 대해 실행되면 실패하고 -1을 반환합니다.

34.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현재 새로운 기능입니다포스트그레SQL9.3. 이 함수가 이전 서버 버전에 대해 실행되면 실패하고 -1을 반환합니다.

34.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, 그러나 다음을 허용할 수 있습니다.len값이 2GB를 초과합니다.

lo_truncate현재 새로운 내용PostgreSQL8.3; 이 함수가 이전 서버 버전에 대해 실행되면 실패하고 -1을 반환합니다.

lo_truncate64현재 새로운 기능입니다PostgreSQL9.3; 이 함수가 이전 서버 버전에 대해 실행되면 실패하고 -1을 반환합니다.

34.3.10. 대형 롤 토토 설명자 닫기

큰 개체 설명자는 호출을 통해 닫힐 수 있습니다.

int lo_close(PGconn *conn, int fd);

어디에서fd는 다음에서 반환된 대형 개체 설명자입니다.lo_open. 성공하면,lo_close0을 반환합니다. 오류가 발생하면 반환 값은 -1입니다.

트랜잭션 종료 시 열려 있는 대형 개체 설명자는 자동으로 닫힙니다.

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.