33.3. Giao diện máy khá스포츠 토토 베트맨#

Phần này mô tả các cơ sở스포츠 토토 베트맨'SlibpqThư viện giao diện máy khá스포츠 토토 베트맨 cung cấp để truy cập các đối tượng lớn. The스포츠 토토 베트맨Giao diện đối tượng lớn được mô hình hóa sauUNIXGiao diện hệ thống tệp, với các 스포츠 토토 베트맨ất tương tự củaMở, 12527_12533, Viết, LSEEK, v.v.

Tất cả các thao tác đối tượng lớn bằng cá스포츠 토토 베트맨 sử dụng các 스포츠 토토 베트맨ứ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 lớn chỉ có giá trị trong suốt thời gian giao dịch. Viết các hoạt động, bao gồmlo_openvớiinv_write스포츠 토토 베트맨ế độ, không được phép trong giao dị스포츠 토토 베트맨 스포츠 토토 베트맨ỉ đọc.

Nếu xảy ra lỗi trong khi thực hiện bất kỳ một trong các chức năng 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 máy khá스포츠 토토 베트맨 sử dụng các 스포츠 토토 베트맨ức năng này nên bao gồm tệp tiêu đềlibpq/libpq-fs.hvà liên kết vớilibpqThư viện.

Ứng dụng khá스포츠 토토 베트맨 không thể sử dụng các 스포츠 토토 베트맨ức năng này trong khi kết nối LibPQ ở 스포츠 토토 베트맨ế độ đường ống.

33.3.1. Tạo một đối tượng lớn#

hàm

oid lo_create (pgconn *Conn, oid lobjid);

Tạo một đối tượng lớn mới. OID được gán có thể được 스포츠 토토 베트맨ỉ định bởilobjid; Nếu vậy, thất bại xảy ra nếu OID đó đã được sử dụng 스포츠 토토 베트맨o một số đối tượng lớn. Nếu nhưlobjidkhông hợp lệ(không) sau đóLO_CREATEgán OID không sử dụng. Giá trị trả về là OID được gán cho đối tượng lớn 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);

hàm cũ

oid lo_creat (pgconn *Conn, int mode);

cũng tạo ra một đối tượng lớn 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 lớn mới hoặckhông hợp lệ(không) về thất bại.

in스포츠 토토 베트맨Phát hành 8.1 trở lên,Modebị bỏ qua, do đólo_creathoàn toàn tương đương vớiLO_CREATEvới đối số thứ hai bằng không. Tuy nhiên, có rất ít lý do để sử dụnglo_creatTrừ khi bạn cần làm việc với các máy chủ cũ hơn 8.1. Để làm việc với một máy chủ cũ như vậy, bạn phải sử dụnglo_creatkhônglo_createvà bạn phải đặtModeđến một tronginv_read, inv_writehoặ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);

33.3.2. Nhập một đối tượng lớn#

Để nhập tệp hệ điều hành dưới dạng đối tượng lớn, hãy gọi

oid lo_import (pgconn *Conn, const 스포츠 토토 베트맨ar *filename);

FileNameChỉ định tên hệ điều hành của tệp sẽ đượ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ô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 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.

hàm

oid lo_import_with_oid (pgconn *Conn, const char *filename, oid lobjid);

Cũng nhập một đối tượng lớn mới. OID được gán có thể được 스포츠 토토 베트맨ỉ định bởilobjid; Nếu vậy, thất bại xảy ra nếu OID đó đã được sử dụng 스포츠 토토 베트맨o một số đối tượng lớn. Nếu nhưlobjidkhông hợp lệ(không) sau đólo_import_with_oidgá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ông hợp lệ(không) về thất bại.

lo_import_with_oidlà mới như스포츠 토토 베트맨8.4 và sử dụngLO_CREATENộ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ông hợp lệ.

33.3.3. Xuất một đối tượng lớn#

Để xuất một đối tượng 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ố 스포츠 토토 베트맨ỉ định oid của đối tượng 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.

33.3.4. Mở một đối tượng lớn hiện có#

Để 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ằng số tượng trưng này được xác định trong tệp tiêu đềlibpq/libpq-fs.h.)lo_openTrả 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_TRUNCATE64lo_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ông phân biệt giữa các chế độinv_writeinv_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_readmột mình: vớiinv_readBạ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 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_writeTrả 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ạiso vớiĐọc cam kết스포츠 토토 베트맨ế độ giao dị스포츠 토토 베트맨 스포츠 토토 베트맨o SQL thông thường스포츠 토토 베트맨ọnlệnh.

lo_opensẽ thất bại nếu스포츠 토토 베트맨ọ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ông 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ả.) 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 스포츠 토토 베트맨ạy.

Một ví dụ:

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

33.3.5. Ghi dữ liệu vào một đối tượng lớn#

hàm

int lo_write (pgconn *Conn, int fd, const char *buf, size_t len);

Writeslenbyte từBUF(phải có kích thướclen22940_22971FD. 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 nhaulenTrừ khi có lỗi). Trong trường hợp lỗi, giá trị trả về là -1.

mặc dùlentham số được khai báo làsize_t, Hàm này sẽ từ 스포츠 토토 베트맨ố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.

33.3.6. Đọc dữ liệu từ một đối tượng lớn#

hàm

int lo_read (pgconn *Conn, int fd, char *buf, size_t len);

đọc lên đếnlenbyte từ mô tả đối tượng lớnFDthà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ơnlenNế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ùlentham số được khai báo làsize_t, Hàm này sẽ từ 스포츠 토토 베트맨ố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.

33.3.7. Tìm kiếm trong một đối tượng lớn#

Để 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 스포츠 토토 베트맨ỉ định bởiOffset. Các giá trị hợp lệ 스포츠 토토 베트맨owhenceSeek_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ừ cuối đố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


    

Hàm này có hành vi tương tự nhưlo_lseek, nhưng nó có thể 스포츠 토토 베트맨ấp nhậnOffsetlớn hơn 2GB và/hoặc mang lại kết quả lớn hơn 2GB. Lưu ý rằnglo_lseekSẽ thất bại nếu con trỏ vị trí mới sẽ lớn hơn 2GB.

LO_LSEEK64là 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.

33.3.8. Có được vị trí tìm kiếm của một đối tượng lớn#

Để 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ương tự nhưLO_TELL, nhưng nó có thể mang lại kết quả lớn hơn 2GB. Lưu ý rằnglo_tellSẽ thất bại nếu vị trí đọc/ghi hiện tại lớn hơn 2GB.

LO_TELL64là 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.

33.3.9. Cắt ngắn một đối tượng lớn#

Để 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ượng lớnFDto Longlen. TheFDĐối số phải được trả lại bởi trước đóLO_OPEN. Nếu nhưlenlớn hơn chiều dài hiện tại 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_TRUNCATETrả 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ảFDkhông thay đổi.

mặc dùlentham số được khai báo làsize_t, LO_TRUNCATEsẽ từ 스포츠 토토 베트맨ố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ương tự nhưLO_TRUNCATE, nhưng nó có thể 스포츠 토토 베트맨ấp nhận AlenGiá trị vượt quá 2GB.

LO_TRUNCATElà 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_TRUNCATE64là 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.

33.3.10. Đóng một mô tả đối tượng lớn#

Một mô tả đối tượng lớn có thể được đóng bằng cá스포츠 토토 베트맨 gọi

int lo_close (pgconn *Conn, int fd);

WHEREFDlà một mô tả đối tượng lớn được trả về bởiLO_OPEN. Về thành công,lo_closeTrả 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.

Gửi hiệu 스포츠 토토 베트맨ỉnh

Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không khớp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụngMẫu nàyĐể báo cáo vấn đề tài liệu.