Phần này mô tả các cơ sởPostgreSQL'slibpqThư viện giao diện cách đọc kèo bóng đá cung cấp để truy cập các đối tượng lớn. ThePostgreSQLGiao cách đọc kèo bóng đá đối tượng lớn được mô hình hóa sauUNIXGiao cách đọc kèo bóng đá hệ thống tệp, với các chất tương tự củaMở
, đọc
, Viết
, LSEEK
, v.v.
Tất cả các thao tác đối tượng cách đọc kèo bóng đá bằng cách sử dụng các chức năng nàyphảidiễn ra trong một khối giao dịch SQL, vì các mô tả tệp đối tượng cách đọc kèo bóng đá chỉ có giá trị trong suốt thời gian giao dịch. Viết các hoạt động, bao gồmLO_OPEN
vớiinv_write
Chế độ, không được phép trong giao dịch chỉ đọc.
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ể tin được, 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
.
Ứng dụng cách đọc kèo bóng đá sử dụng các chức năng này nên bao gồm tệp tiêu đềlibpq/libpq-fs.h
và liên kết vớilibpqThư viện.
Ứng dụng cách đọc kèo bóng đá không thể sử dụng các chức năng này trong khi kết nối libpq ở chế độ đường ống.
oid lo_create (pgconn *Conn, oid lobjid);
Tạo một đối tượng cách đọc kèo bóng đá 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ụng cho một số đối tượng cách đọc kèo bóng đá.lobjid
làkhông hợp lệ
(không) sau đóLO_CREATE
gán OID không sử dụng. Giá trị trả về là OID được gán cho đối tượng cách đọc kèo bóng đá mới hoặckhông hợp lệ
(không) về thất bại.
Một ví dụ:
inv_oid = lo_create (Conn, desired_oid);
oid lo_creat (pgconn *Conn, int mode);
cũng tạo ra một đối tượng cách đọc kèo bóng đá mới, luôn luôn gán một OID không sử dụng. Giá trị trả về là OID được gán cho đối tượng cách đọc kèo bóng đá mới hoặckhông hợp lệ
(không) về thất bại.
inPostgreSQLPhát hành 8.1 trở lên,Mode
bị bỏ qua, do đólo_creat
hoàn toàn tương đương vớiLO_CREATE
với đối số thứ hai bằng không. Tuy nhiên, có rất ít lý do để sử dụnglo_creat
Trừ khi bạn cần làm việc với các cách đọc kèo bóng đá chủ cũ hơn 8.1. Để làm việc với một cách đọc kèo bóng đá chủ cũ như vậy, bạn phải sử dụnglo_creat
khôngLO_CREATE
và bạn phải đặtMode
đến một tronginv_read
, inv_write
hoặcinv_read
|
inv_write
. (Các hằng số tượng trưng này được xác định trong tệp tiêu đềlibpq/libpq-fs.h
.)
Một ví dụ:
inv_oid = lo_creat (Conn, inv_read | inv_write);
Để nhập tệp hệ điều hành dưới dạng đối tượng cách đọc kèo bóng đá, 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 cách đọc kèo bóng đá. Giá trị trả về là OID được gán cho đối tượng cách đọc kèo bóng đá mới hoặckhông 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 cách đọc kèo bóng đá, không phải bởi máy chủ;
oid lo_import_with_oid (pgconn *Conn, const char *filename, oid lobjid);
Cũng nhập một đối tượng cách đọc kèo bóng đá 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ụng cho một số đối tượng cách đọc kèo bóng đá.lobjid
làkhông hợp lệ
(không) 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 cách đọc kèo bóng đá mới hoặckhông hợp lệ
(không) về thất bại.
lo_import_with_oid
là mới nhưPostgreSQL8.4 và sử dụngLO_CREATE
Nội bộ là 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ông hợp lệ
.
Để xuất một đối tượng cách đọc kèo bóng đá 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ượng cách đọc kèo bóng đá để 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 cách đọc kèo bóng đá, không phải bởi máy chủ.
Để mở một đối tượng cách đọc kèo bóng đá hiện có để đọc hoặc viết, hãy gọi
int lo_open (pgconn *Conn, oid lobjid, int mode);
Thelobjid
Đối số chỉ định oid của đối tượng cách đọc kèo bóng đá để mở. Thechế độ
Đ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ằng số tượng trưng này được xác định trong tệp tiêu đềlibpq/libpq-fs.h
.)LO_OPEN
Trả về một mô tả đối tượng cách đọc kèo bóng đá (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.
cách đọc kèo bóng đá chủ hiện không 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 cách đọc kèo bóng đá tại thời điểm ảnh chụp nhanh giao dịch đang hoạt động khilo_open
đã được thực hiện, 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 bản ghi của các giao dịch cam kết khác cũng như ghi về 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ông thườngChọ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 cách đọc kèo bóng đá hoặc nếuinv_write
được chỉ định vàCập nhật
Đặc quyền không có sẵn. (TrướcPostgreSQL11, 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 đọc kèo bóng đá sử dụng bộ mô tả.) Các kiểm tra đặc quyền này có thể bị vô hiệu hóa vớiLO_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
23271_23302FD
. 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 cách đọc kèo bóng đá hơnint_max
. Trong thực tế, tốt nhất là chuyển dữ liệu trong các phần cách đọc kèo bóng đá 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 cách đọc kèo bóng đáFD
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ề;len
Nếu kết thúc của đối tượng cách đọc kèo bóng đá đạ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 cách đọc kèo bóng đá hơnint_max
. Trong thực tế, tốt nhất là chuyển dữ liệu trong các phần cách đọc kèo bóng đá 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 cách đọc kèo bóng đá, 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 cách đọc kèo bóng đá đượ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ượng),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 cách đọc kèo bóng đá có thể vượt quá kích thước 2GB, thay vào đó sử dụng
26633_26706
Hàm này có hành vi tương tự nhưlo_lseek
, nhưng nó có thể chấp nhậnOffset
cách đọc kèo bóng đá hơn 2GB và/hoặc mang lại kết quả cách đọc kèo bóng đá hơn 2GB. Lưu ý rằnglo_lseek
Sẽ thất bại nếu con trỏ vị trí mới sẽ cách đọc kèo bóng đá hơn 2GB.
LO_LSEEK64
là mới nhưPostgreSQL9.3. Nếu chức năng này được chạy so với phiên bản cách đọc kèo bóng đá 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 cách đọc kèo bóng đá, 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 cách đọc kèo bóng đá có thể vượt quá kích thước 2GB, thay vào đó sử dụng
int64_t lo_tell64 (pgconn *Conn, int fd);
Hàm này có hành vi tương tự nhưlo_tell
, nhưng nó có thể mang lại kết quả cách đọc kèo bóng đá hơn 2GB. Lưu ý rằngLO_TELL
Sẽ thất bại nếu vị trí đọc/ghi hiện tại cách đọc kèo bóng đá hơn 2GB.
LO_TELL64
là mới nhưPostgreSQL9.3. Nếu chức năng này được chạy so với phiên bản cách đọc kèo bóng đá chủ cũ hơn, nó sẽ thất bại và trả về -1.
Để cắt một đối tượng cách đọc kèo bóng đá 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ượng cách đọc kèo bóng đáFD
to Longlen
. TheFD
Đối số phải được trả lại bởi trước đólo_open
. Nếu nhưlen
cách đọc kèo bóng đá hơn chiều dài dòng điện của đối tượng cách đọc kèo bóng đá, đối tượng cách đọc kèo bóng đá đượ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 bộ mô tảFD
không 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 cách đọc kèo bóng đá hơnINT_MAX
.
Khi xử lý các đối tượng cách đọc kèo bóng đá có thể vượt quá kích thước 2GB, thay vào đó sử dụng
int lo_truncate64 (pgconn *Conn, int fd, int64_t len);
Hàm này có hành vi giống nhưLO_TRUNCATE
, nhưng nó có thể chấp nhận mộtlen
Giá trị vượt quá 2GB.
LO_TRUNCATE
là mới nhưPostgreSQL8.3; Nếu chức năng này được chạy so với phiên bản cách đọc kèo bóng đá chủ cũ hơn, nó sẽ thất bại và trả về -1.
LO_TRUNCATE64
là mới nhưPostgreSQL9.3; Nếu chức năng này được chạy so với phiên bản cách đọc kèo bóng đá chủ cũ hơn, nó sẽ thất bại và trả về -1.
Một mô tả đối tượng cách đọc kèo bóng đá có thể được đóng bằng cách gọi
int lo_close (pgconn *Conn, int fd);
WHEREFD
Là một mô tả đối tượng cách đọc kèo bóng đá đượ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 cách đọc kèo bóng đá nào vẫn mở vào cuối giao dịch sẽ được đóng tự động.
Để xóa một đối tượng cách đọc kèo bóng đá khỏi cơ sở dữ liệu, gọi
int lo_unlink (pgconn *Conn, oid lobjid);
Thelobjid
Đối số chỉ định oid của đối tượng cách đọc kèo bóng đá để loại bỏ. Trả về 1 nếu thành công, -1 khi thất bại.