Phần này mô tả các cơ sở토토 베이'slibpqThư viện giao diện máy khách cu토토 베이 cấp để truy cập các đối tượ토토 베이 lớn. The토토 베이Giao diện đối tượ토토 베이 lớn được mô hình hóa sauUNIXGiao diện hệ thố토토 베이 tệp, với các chất tươ토토 베이 tự củaMở
, đọc
, Viết
, LSEEK
, v.v.
Tất cả các thao tác đối tượ토토 베이 lớn bằ토토 베이 cách sử dụ토토 베이 các chức nă토토 베이 nàyphảidiễn ra tro토토 베이 một khối giao dịch SQL, vì các mô tả tệp đối tượ토토 베이 lớn chỉ có giá trị tro토토 베이 suốt thời gian giao dịch.
Nếu xảy ra lỗi trong khi thực hiện bất kỳ một trong các hàm này, hàm sẽ trả về giá trị không thể xảy ra, thường là 0 hoặc -1. Một thông báo mô tả lỗi được lưu trữ trong đối tượng kết nối và có thể được truy xuất vớipqerrormessage
.
Ứ토토 베이 dụ토토 베이 máy khách sử dụ토토 베이 các chức nă토토 베이 này nên bao gồm tệp tiêu đềlibpq/libpq-fs.h
và liên kết vớilibpqThư viện.
oid lo_creat (pgconn *Conn, int mode);
Tạo một đối tượng lớn mới. Giá trị trả về là OID được gán cho đối tượng lớn mới hoặckhô토토 베이 hợp lệ
(không) về thất bại.Mode
khô토토 베이 được sử dụ토토 베이 và bỏ qua như토토 베이8.1; Tuy nhiên, để tương thích ngược với các bản phát hành trước đó, tốt nhất là đặt nó thànhinv_read
, inv_write
hoặcinv_read
|
inv_write
. (Các hằ토토 베이 số tượ토토 베이 trư토토 베이 này được xác định tro토토 베이 tệp tiêu đềlibpq/libpq-fs.h
.)
Một ví dụ:
inv_oid = lo_creat (Conn, inv_read | inv_write);
oid lo_create (pgconn *Conn, oid lobjid);
cũ토토 베이 tạo ra một đối tượ토토 베이 lớn mới. OID được gán có thể được chỉ định bởilobjid
; Nếu vậy, thất bại xảy ra nếu OID đó đã được sử dụ토토 베이 cho một số đối tượ토토 베이 lớn. Nếu nhưlobjid
làkhô토토 베이 hợp lệ
(khô토토 베이) sau đóLO_CREATE
gán OID không sử dụng (đây là hành vi tương tự nhưlo_creat
). Giá trị trả về là OID được gán cho đối tượng lớn mới hoặckhô토토 베이 hợp lệ
(không) về thất bại.
LO_CREATE
là mới như토토 베이8.1; Nếu chức năng này chạy so với phiên bản máy chủ cũ hơn, nó sẽ thất bại và trả vềkhô토토 베이 hợp lệ
.
Một ví dụ:
inv_oid = lo_create (Conn, mong muốn_oid);
Để nhập tệp hệ điều hành dưới dạ토토 베이 đối tượ토토 베이 lớn, hãy gọi
oid lo_import (pgconn *Conn, const char *filename);
FileName
Chỉ định tên hệ điều hành của tệp được nhập dưới dạng một đối tượng lớn. Giá trị trả về là OID được gán cho đối tượng lớn mới hoặckhô토토 베이 hợp lệ
(không) về thất bại. Lưu ý rằng tệp được đọc bởi thư viện giao diện máy khách, không phải bởi máy chủ; Vì vậy, nó phải tồn tại trong hệ thống tệp máy khách và có thể đọc được bởi ứng dụng máy khách.
oid lo_import_with_oid (pgconn *Conn, const char *filename, oid lobjid);
Cũ토토 베이 nhập một đối tượ토토 베이 lớn mới. OID được gán có thể được chỉ định bởilobjid
; Nếu vậy, thất bại xảy ra nếu OID đó đã được sử dụ토토 베이 cho một số đối tượ토토 베이 lớn. Nếu nhưlobjid
làkhô토토 베이 hợp lệ
(khô토토 베이) sau đólo_import_with_oid
gán OID không sử dụng (đây là hành vi tương tự nhưlo_import
). Giá trị trả về là OID được gán cho đối tượng lớn mới hoặckhô토토 베이 hợp lệ
(không) về thất bại.
lo_import_with_oid
là mới như토토 베이8.4 và sử dụnglo_create
Nội bộ mới trong 8.1; Nếu chức năng này được chạy so với 8.0 hoặc trước đó, nó sẽ thất bại và trả vềkhô토토 베이 hợp lệ
.
Để xuất một đối tượ토토 베이 lớn vào tệp hệ điều hành, gọi
int lo_export (pgconn *Conn, oid lobjid, const char *filename);
Thelobjid
Đối số chỉ định oid của đối tượ토토 베이 lớn để xuất vàFileName
Đối số Chỉ định tên hệ điều hành của tệp. Lưu ý rằng tệp được viết bởi thư viện giao diện máy khách, không phải bởi máy chủ. Trả về 1 khi thành công, -1 khi thất bại.
Để mở một đối tượng lớn hiện có để đọc hoặc viết, gọi
int lo_open (pgconn *Conn, oid lobjid, int mode);
Thelobjid
Đối số chỉ định oid của đối tượng lớn để mở. TheMode
Điều khiển bit xem đối tượng có được mở để đọc không (inv_read
), viết (inv_write
) hoặc cả hai. (Các hằ토토 베이 số tượ토토 베이 trư토토 베이 này được xác định tro토토 베이 tệp tiêu đềlibpq/libpq-fs.h
.)lo_open
Trả về một mô tả đối tượng lớn (không âm) để sử dụng saulo_read
, lo_write
, lo_lseek
, LO_LSEEK64
, lo_tell
, lo_tell64
, lo_truncate
, LO_TRUNCATE64
vàlo_close
. Bộ mô tả chỉ có giá trị trong suốt thời gian của giao dịch hiện tại. Khi thất bại, -1 được trả về.
Máy chủ hiện khô토토 베이 phân biệt giữa các chế độinv_write
vàinv_read
|
inv_write
: Bạn được phép đọc từ bộ mô tả trong cả hai trường hợp. Tuy nhiên có một sự khác biệt đáng kể giữa các chế độ này vàinv_read
một mình: vớiinv_read
Bạn không thể viết trên bộ mô tả và dữ liệu được đọc từ nó sẽ phản ánh nội dung của đối tượng lớn tại thời điểm chụp nhanh giao dịch đã hoạt động khiLO_OPEN
đã được thực thi, bất kể sau đó viết bởi các giao dịch này hoặc các giao dịch khác. Đọc từ một mô tả được mở bằnginv_write
Trả về dữ liệu phản ánh tất cả các văn bản của các giao dịch cam kết khác cũng như ghi của giao dịch hiện tại. Điều này tương tự như hành vi củaĐọc lặp lại
so vớiĐọc cam kết
Chế độ giao dịch cho SQL thô토토 베이 thườ토토 베이Chọn
lệnh.
LO_OPEN
sẽ thất bại nếuChọn
Đặc quyền không có sẵn cho đối tượng lớn hoặc nếuinv_write
được chỉ định vàCập nhật
Đặc quyền khô토토 베이 có sẵn. (Trước토토 베이11, các kiểm tra đặc quyền này được thực hiện tại cuộc gọi đọc hoặc ghi thực tế đầu tiên bằng cách sử dụng bộ mô tả.)LO_COMPAT_PRIVILEGEStham số thời gian chạy.
Một ví dụ:
inv_fd = lo_open (Conn, inv_oid, inv_read | inv_write);
int lo_write (pgconn *Conn, int fd, const char *buf, size_t len);
Writeslen
byte từBUF
(phải có kích thướclen
) đến mô tả đối tượ토토 베이 lớnFD
. TheFD
Đối số phải được trả lại bởi trước đóLO_OPEN
. Số lượng byte thực sự được viết được trả về (trong quá trình triển khai hiện tại, điều này sẽ luôn bằng nhaulen
Trừ khi có lỗi). Trong trường hợp lỗi, giá trị trả về là -1.
mặc dùlen
Tham số được khai báo làsize_t
, Hàm này sẽ từ chối các giá trị độ dài lớn hơnint_max
. Trong thực tế, tốt nhất là chuyển dữ liệu trong các phần lớn nhất là một vài megabyte.
int lo_read (pgconn *Conn, int fd, char *buf, size_t len);
đọc lên đếnlen
byte từ mô tả đối tượng lớnFD
thànhBUF
(phải có kích thướclen
). TheFD
Đối số phải được trả lại bởi trước đólo_open
. Số lượng byte thực sự đọc được trả về; cái này sẽ nhỏ hơnlen
Nếu kết thúc của đối tượng lớn đạt được trước tiên. Trong trường hợp lỗi, giá trị trả về là -1.
mặc dùlen
tham số được khai báo làsize_t
, Hàm này sẽ từ chối các giá trị độ dài lớn hơnint_max
. Trong thực tế, tốt nhất là chuyển dữ liệu trong các phần lớn nhất là một vài megabyte.
Để thay đổi vị trí đọc hoặc ghi hiện tại được liên kết với một mô tả đối tượng lớn, gọi
int lo_lseek (pgconn *Conn, int fd, int offset, int whence);
Hàm này di chuyển con trỏ vị trí hiện tại cho bộ mô tả đối tượng lớn được xác định bởiFD
đến vị trí mới được chỉ định bởiOffset
. Các giá trị hợp lệ chowhence
làSeek_set
(tìm kiếm từ bắt đầu đối tượ토토 베이),Seek_cur
(tìm kiếm từ vị trí hiện tại) vàSeek_end
(tìm kiếm từ đầu đối tượng). Giá trị trả về là con trỏ vị trí mới hoặc -1 trên lỗi.
Khi xử lý các đối tượng lớn có thể vượt quá kích thước 2GB, thay vào đó sử dụng
25856_25931
Hàm này có hành vi tươ토토 베이 tự nhưlo_lseek
, như토토 베이 nó có thể chấp nhậnOffset
lớn hơn 2GB và/hoặc mang lại kết quả lớn hơn 2GB. Lưu ý rằnglo_lseek
Sẽ thất bại nếu con trỏ vị trí mới sẽ lớn hơn 2GB.
LO_LSEEK64
là mới như토토 베이9.3. Nếu chức năng này được chạy so với phiên bản máy chủ cũ hơn, nó sẽ thất bại và trả về -1.
Để có được vị trí đọc hoặc ghi hiện tại của một mô tả đối tượng lớn, gọi
int lo_tell (pgconn *Conn, int fd);
Nếu có lỗi, giá trị trả về là -1.
Khi xử lý các đối tượng lớn có thể vượt quá kích thước 2GB, thay vào đó sử dụng
pg_int64 lo_tell64 (pgconn *Conn, int fd);
Hàm này có hành vi tươ토토 베이 tự nhưlo_tell
, như토토 베이 nó có thể ma토토 베이 lại kết quả lớn hơn 2GB. Lưu ý rằ토토 베이lo_tell
Sẽ thất bại nếu vị trí đọc/ghi hiện tại lớn hơn 2GB.
LO_TELL64
là mới như토토 베이9.3. Nếu chức năng này được chạy so với phiên bản máy chủ cũ hơn, nó sẽ thất bại và trả về -1.
Để cắt một đối tượng lớn thành một độ dài nhất định, gọi
int lo_truncate (pgconn *Conn, int fd, size_t len);
Hàm này cắt giảm mô tả đối tượ토토 베이 lớnFD
to Lo토토 베이len
. TheFD
Đối số phải được trả lại bởi trước đóLO_OPEN
. Nếu nhưlen
lớn hơn chiều dài dòng điện của đối tượng lớn, đối tượng lớn được mở rộng đến độ dài được chỉ định với các byte null ('\ 0'). Về thành công,LO_TRUNCATE
Trả về 0. Khi lỗi, giá trị trả về là -1.
Vị trí đọc/ghi được liên kết với mô tảFD
khô토토 베이 thay đổi.
mặc dùlen
Tham số được khai báo làsize_t
, LO_TRUNCATE
sẽ từ chối các giá trị độ dài lớn hơnint_max
.
Khi xử lý các đối tượng lớn có thể vượt quá kích thước 2GB, thay vào đó sử dụng
int lo_truncate64 (pgconn *Conn, int fd, pg_int64 len);
Hàm này có hành vi tươ토토 베이 tự nhưLO_TRUNCATE
, như토토 베이 nó có thể chấp nhận Alen
Giá trị vượt quá 2GB.
LO_TRUNCATE
là mới như토토 베이8.3; Nếu chức năng này được chạy so với phiên bản máy chủ cũ hơn, nó sẽ thất bại và trả về -1.
LO_TRUNCATE64
là mới như토토 베이9.3; Nếu chức năng này được chạy so với phiên bản máy chủ cũ hơn, nó sẽ thất bại và trả về -1.
Một mô tả đối tượ토토 베이 lớn có thể được đó토토 베이 bằ토토 베이 cách gọi
int lo_close (pgconn *Conn, int fd);
WHEREFD
là một mô tả đối tượng lớn được trả về bởiLO_OPEN
. Về thành công,lo_close
Trả về 0. Khi lỗi, giá trị trả về là -1.
Bất kỳ mô tả đối tượng lớn nào vẫn mở vào cuối giao dịch sẽ được đóng tự động.