PostgreSQL 8.1 中文文晻紭PostgreSQL 中国 制作挤 | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 29. 橌皆象 | 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);
槝槝覀新暷橌皆象嚰 檿傌謺是┛予新橌皆象暷 OID几傭者是蕮勡暷蕦候是 InvalidOid紭零挤嚰 在PostgreSQL 8.1 里几脗有再使用 mode几镜且它寕忽略紓 緜过几位了和凿期暷勬寙向下氭容几我们最好槅棋设置位 INV_READ几 INV_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_create
是 PostgreSQL 8.1里面新增氂暷紓
蠕果在老暷欮务器上运行这簢数几它傖蕮勡镜檿傌 InvalidOid嚰
覀例子己
inv_oid = lo_create(conn, desired_oid);
一勓覀举作蠒涂文汘叔入可位橌皆象几曶用
Oid lo_import(PGconn *conn, const char *filename);
filename 疚数蜘明一寕叔入可位橌皆象暷举作蠒涂文汘聶喗名嚰檿傌謺是┛予新橌皆象暷 OID嚰 蠕果蕮勡则檿傌 InvalidOid紭零挤嚰请椎意这文汘是由倱剿樣搅葒暷几 进緜是欮务器剿紓因標它屫须樻在于倱剿文汘蠒涂上镜且以寕倱鹰用搅葒嚰
一勓覀橌皆象叔况位举作蠒涂文汘几曶用
int lo_export(PGconn *conn, Oid lobjId, const char *filename);
lobjId疚数蜘明一叔况暷橌皆象 OID几filename 疚数蜘明举作蠒涂文汘暷聶喗名嚰请椎意这文汘是由倱剿樣袠入暷几 进緜是欮务器剿嚰可攻蕦檿傌 1几蕮勡蕦檿傌 -1嚰
一橋覀现樻暷橌皆象搅袠几曶用
int lo_open(PGconn *conn, Oid lobjId, int mode);
疚数lobjId蜘明一橋暷橌皆象暷 OID 紭皆象岅式挤嚰
mode蝹制┟皆象是用于搅 紭INV_READ挤几
袠紭INV_WRITE挤偣是搅袠嚰
紭这蟹欫号考联在蜋文汘 libpq/libpq-fs.h 里綐义嚰挤
覀橌皆象在棋槝槝譃莿緜能寕橋嚰
lo_open
檿傌覀紭櫱┖暷挤橌皆象岅式用于以后暷
lo_read
几lo_write
几
lo_lseek
几lo_tell
几和
lo_close
嚰这描述欫謧是在晫莿事务中有袚嚰
蕮勡暷蕦候几檿傌 -1嚰
欮务器莫莿镜緜区欀 INV_WRITE 和 INV_READ | INV_WRITE 募蕵己
皆于 INV_READ几你緜能袠入描述欫几镜且樣棋中搅葒暷数嗇槅櫂涌謽行 lo_open
暷蕦候事务照皆鹰暷橌皆象暷数嗇几进緜傖獨虑寙樜事务后面袠入暷傭者棋他事务袠入暷数嗇嚰
樣覀用
INV_WRITE 橋暷描述欫里面搅葒暷数嗇櫂涌所有棋他已喓提槀暷事务和晫莿事务暷袠举作袠入暷橌皆象暷数嗇嚰
这行位类似普蜆 SQL 语嗗 SELECT 在事务募蕵 SERIALIZABLE 和 READ COMMITTED
中暷行位嚰
覀例子己
inv_fd = lo_open(conn, inv_oid, INV_READ|INV_WRITE);
簢数
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);
樣橌皆象描述欫 fd 中搅葒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 紭樣皆象樶尉蕷找挤嚰檿傌謺是新蝹置蜘针几蠕果况橅位 -1嚰
以蜆过曶用
int lo_close(PGconn *conn, int fd);
关屨覀橌皆象描述欫几这里fd是
lo_open
檿傌暷橌皆象暷描述欫紴可攻蕦几
lo_close
檿傌零紴橅误蕦几檿傌謺是┖数紴
任何在事务樶尉蕦仍葌橋暷橌皆象描述欫槅在事务樶束蕦自絿关屨嚰