| PostgreSQL 7.4 文檔 | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 28. 大對象 | Fast Forward | Next |
本節描述 PostgreSQL 客戶端接口庫提供來訪問大對象的設施。 所有使用這些函數進行的大對象操作都必須在一個SQL事務裡實現。 (這個要求是自 PostgreSQL 6.5 以來的一個嚴格的要求,雖然在以前的版本裡就隱含這樣的要求,如果忽略這一點會導致錯誤的表現。) PostgreSQL大對象接口是對 Unix 文件系統的模仿,有仿真的 open,read, write, lseek,等.
使用 libpq 裡面大對象接口的的客戶端應用應該包含頭文件 libpq/libpq-fs.h 並且和 libpq 庫鏈接。
函數
Oid lo_creat(PGconn *conn, int mode);
創建一個新的大對象. mode是一個位掩碼, 描述新對象的不同屬性。 這裡列出的符號常量在 libpq/libpq-fs.h 列出。 訪問類型(讀,寫或者兩者)是對位 INV_READ 和 INV_WRITE進行或操作構成的。 掩碼的低十六位是大對象要存放于內的存儲管理器號。 對于除 Berkeley (伯克利)以外的節點,這些位都應總是零。 返回值是賦予新大對象的 OID。
例子:
inv_oid = lo_creat(INV_READ|INV_WRITE);
要打開一個現存的大對象,調用
int lo_open(PGconn *conn, Oid lobjId, int mode);
參數lobjId指明要打開的大對象的 OID (對象標識)。 mode位控制該對象是用于讀 (INV_READ), 寫(INV_WRITE)還是讀寫。 一個大對象在其創建之前不能被打開。 lo_open 返回一個大對象標識用于以後的 lo_read,lo_write, lo_lseek,lo_tell,和 lo_close。這個描述符只是在當前事務中有效。
函數
int lo_write(PGconn *conn, int fd, const char *buf, size_t len);
從buf中向大對象fd中寫len字節. 參數fd必須是前面一個 lo_open 調用的返回。 返回實際寫的字節數.出錯時返回負數.
函數
int lo_read(PGconn *conn, int fd, char *buf, size_t len);
從大對象中讀取len字節數據到buf中。 fd參數必須是前面的一個 lo_open調用的返回。 返回實際讀取的字節數。出錯時,返回一個負數。
要改變當前大對象的讀或寫位置,調用
int lo_lseek(PGconn *conn, int fd, int offset, int whence);
這個過程把當前fd代表的大對象位置指針移動到 offset指明的新的位置。 參數whence的合法的取值是 SEEK_SET(從對象開頭開始找),SEEK_CUR(從當前位置開始找),和SEEK_END (從對象結尾開始找)。返回值是新位置指針。
可以通過調用
int lo_close(PGconn *conn, int fd);
關閉一個大對象,這裡fd是 lo_open返回的大對象的描述符.成功時, lo_close 返回零.錯誤時,返回值是負數.
任何在事務結尾時仍然打開的大對象描述符將在事務結束時自動關閉。