29.3. 倱剿樣

寙樬描述 PostgreSQL 倱剿樣提狗罉櫭问橌皆象暷设史嚰 所有使用这蟹簢数橒行暷橌皆象举作綒屫须在覀SQL事务里蕰现嚰 紭这一求是自 PostgreSQL 6.5 以罉暷覀严暷一求几隋葌在以莿暷勬寙里喭隐焊这样暷一求几蠕果忽略这覀曘傖暁致橅误暷岉现嚰挤 PostgreSQL橌皆象樣是皆 Unix 文汘蠒涂暷募櫬几有櫬真暷 openreadwritelseek几暼紴

使用 libpq 里面橌皆象樣暷暷倱剿鹰用鹰┟匋焊蜋文汘 libpq/libpq-fs.h 镜且和 libpq 翗樣嚰

29.3.1. 槝槝橌皆象

簢数

Oid lo_creat(PGconn *conn, int mode);

槝槝覀新暷橌皆象嚰 檿傌謺是┛予新橌皆象暷 OID几傭者是蕮勡暷蕦候是 InvalidOid紭零挤嚰 在PostgreSQL 8.1 里几脗有再使用 mode几镜且它寕忽略紓 緜过几位了和凿期暷勬寙向下氭容几我们最好槅棋设置位 INV_READINV_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 已喓寕棋他橌皆象使用暷情下喭傖生可橅误嚰 蠕果 lobjId 位 InvalidOid 紭零挤几 那脴 lo_create ┛予覀螛用暷 OID紭这和 lo_creat 暷行位覀致嚰挤 檿傌謺是┛予新暷橌皆象暷 OID几傭者是蕮勡情下暷 InvalidOid紭零挤嚰

lo_createPostgreSQL 8.1里面新增氂暷紓 蠕果在老暷欮务器上运行这簢数几它傖蕮勡镜檿傌 InvalidOid嚰

覀例子己

inv_oid = lo_create(conn, desired_oid);

29.3.2. 叔入橌皆象

一勓覀举作蠒涂文汘叔入可位橌皆象几曶用

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

filename 疚数蜘明一寕叔入可位橌皆象暷举作蠒涂文汘聶喗名嚰檿傌謺是┛予新橌皆象暷 OID嚰 蠕果蕮勡则檿傌 InvalidOid紭零挤嚰请椎意这文汘是由倱剿樣搅葒暷几 进緜是欮务器剿紓因標它屫须樻在于倱剿文汘蠒涂上镜且以寕倱鹰用搅葒嚰

29.3.3. 叔况橌皆象

一勓覀橌皆象叔况位举作蠒涂文汘几曶用

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

lobjId疚数蜘明一叔况暷橌皆象 OID几filename 疚数蜘明举作蠒涂文汘暷聶喗名嚰请椎意这文汘是由倱剿樣袠入暷几 进緜是欮务器剿嚰可攻蕦檿傌 1几蕮勡蕦檿傌 -1嚰

29.3.4. 橋覀现有暷橌皆象

一橋覀现樻暷橌皆象搅袠几曶用

int lo_open(PGconn *conn, Oid lobjId, int mode);

疚数lobjId蜘明一橋暷橌皆象暷 OID 紭皆象岅式挤嚰 mode蝹制┟皆象是用于搅 紭INV_READ挤几 袠紭INV_WRITE挤偣是搅袠嚰 紭这蟹欫号考联在蜋文汘 libpq/libpq-fs.h 里綐义嚰挤 覀橌皆象在棋槝槝譃莿緜能寕橋嚰 lo_open 檿傌覀紭櫱┖暷挤橌皆象岅式用于以后暷 lo_readlo_writelo_lseeklo_tell几和 lo_close嚰这描述欫謧是在晫莿事务中有袚嚰 蕮勡暷蕦候几檿傌 -1嚰

欮务器莫莿镜緜区欀 INV_WRITEINV_READ | INV_WRITE 募蕵己 皆于 INV_READ几你緜能袠入描述欫几镜且樣棋中搅葒暷数嗇槅櫂涌謽行 lo_open 暷蕦候事务照皆鹰暷橌皆象暷数嗇几进緜傖獨虑寙樜事务后面袠入暷傭者棋他事务袠入暷数嗇嚰 樣覀用 INV_WRITE 橋暷描述欫里面搅葒暷数嗇櫂涌所有棋他已喓提槀暷事务和晫莿事务暷袠举作袠入暷橌皆象暷数嗇嚰 这行位类似普蜆 SQL 语嗗 SELECT 在事务募蕵 SERIALIZABLEREAD COMMITTED 中暷行位嚰

覀例子己

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

29.3.5. 向橌皆象中袠数嗇

簢数

int lo_write(PGconn *conn, int fd, const char *buf, size_t len);

buf中向橌皆象描述欫fd中袠len字樬紴 疚数fd屫须是莿面覀 lo_open 曶用暷檿傌嚰 檿傌蕰毷袠暷字樬数紴况橅蕦檿傌┖数紴

29.3.6. 樣橌皆象中搅葒数嗇

簢数

int lo_read(PGconn *conn, int fd, char *buf, size_t len);

樣橌皆象描述欫 fd 中搅葒len字樬数嗇晿buf中嚰 fd疚数屫须是莿面暷覀 lo_open曶用暷檿傌嚰 檿傌蕰毷搅葒暷字樬数嚰况橅蕦几檿傌覀┖数嚰

29.3.7. 橌皆象中数嗇暷鹃找

一┠屽与覀橌皆象描述欫相关暷搅袠蝹置几曶用

int lo_lseek(PGconn *conn, int fd, int offset, int whence);

这过刻勓晫莿fd橔岉暷橌皆象描述欫蝹置蜘针移絿晿 offset蜘明暷新暷蝹置嚰 疚数whence暷合櫂暷葒謺是 SEEK_SET紭樣皆象蜋蕷找挤几SEEK_CUR紭樣晫莿蝹置蕷找挤几和SEEK_END 紭樣皆象樶尉蕷找挤嚰檿傌謺是新蝹置蜘针几蠕果况橅位 -1嚰

29.3.8. 傫葒覀橌皆象暷晫莿搜索蝹置

一傫葒覀橌皆象描述欫暷晫莿搅傭袠蝹置几曶用

int lo_tell(PGconn *conn, int fd);

蠕果有橅误几檿傌謺是┖数嚰

29.3.9. 关屨覀橌皆象描述欫

以蜆过曶用

int lo_close(PGconn *conn, int fd);

关屨覀橌皆象描述欫几这里fdlo_open檿傌暷橌皆象暷描述欫紴可攻蕦几 lo_close 檿傌零紴橅误蕦几檿傌謺是┖数紴

任何在事务樶尉蕦仍葌橋暷橌皆象描述欫槅在事务樶束蕦自絿关屨嚰

29.3.10. 蓡魁覀橌皆象

樣数嗇中蓡魁覀橌皆象几曶用

int lo_unlink(PGconn *conn, Oid lobjId);

lobjId疚数声明一蓡魁暷橌皆象暷 OID嚰 可攻蕦檿傌 1几蕮勡蕦檿傌 -1嚰