Thread: Large objects in web applications
Hi, Has there been any substantial change in the way large objects are handled with the coming of 7.1 and the expanded row size limit? Some old online articles suggested that would change things, but the current docs seem say I still need to use functions like lo_import. Assuming things haven't changed for large objects, it appears that to display an image, I'll need to: 1. select the image from postgresql, using lo_export() to save it to a uniquely named temp file (to avoid conflicts with other users). 2. Read/load the temp file and send it out to the browser. 3. Delete the temp file Is this conceptually correct? Any pointers to good docs or articles on doing this with perl? I know it's straightforward, but I'd just as soon not reinvent the same mistakes if I can help it. Thanks, Wes
On Tue, 26 Jun 2001 wsheldah@lexmark.com wrote: > > Has there been any substantial change in the way large objects are handled with > the coming of 7.1 and the expanded row size limit? Some old online articles > suggested that would change things, but the current docs seem say I still need > to use functions like lo_import. For large text objects you may use the toast feature in 7.1 where the length of a text field is no longer limited > > Assuming things haven't changed for large objects, it appears that to display an > image, I'll need to: > 1. select the image from postgresql, using lo_export() to save it to a uniquely > named temp file (to avoid conflicts with other users). > 2. Read/load the temp file and send it out to the browser. > 3. Delete the temp file I do this directly by using the blob_read interface of the DBD::Pg library and then just printing out the blob with the appropriate mimetype. You may refer in the <IMG> tag a script instead of a cooked file. If you like to have an example please contact me directly because this mailing list is not Perl related. Best regards Herbie -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Herbert Liechti http://www.thinx.ch ThinX networked business services Adlergasse 5, CH-4500 Solothurn ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
wsheldah@lexmark.com writes: > Has there been any substantial change in the way large objects are > handled with the coming of 7.1 and the expanded row size limit? No change in the API (but 7.1 is more efficient under the hood). > Assuming things haven't changed for large objects, it appears that to display an > image, I'll need to: > 1. select the image from postgresql, using lo_export() to save it to a uniquely > named temp file (to avoid conflicts with other users). If you just need to read the data, lo_export to a file and read the file is certainly the hard way. Use lo_open/lo_read. regards, tom lane
Where exactly is lo_read ? test=# \df+ lo_ List of functions Result | Function | Arguments | Owner | Language | Source | Description ---------+-----------+---------------------------+-------+----------+-----------+----------------------------- integer | lo_close | integer | pgsql | internal | lo_close | large object close oid | lo_creat | integer | pgsql | internal | lo_creat | large object create integer | lo_export | oid, text | pgsql | internal | lo_export | large object export oid | lo_import | text | pgsql | internal | lo_import | large object import integer | lo_lseek | integer, integer, integer | pgsql | internal | lo_lseek | large object seek integer | lo_open | oid, integer | pgsql | internal | lo_open | large object open integer | lo_tell | integer | pgsql | internal | lo_tell | large object position integer | lo_unlink | oid | pgsql | internal | lo_unlink | large object unlink(delete) (8 rows) :-/ TIA, thalis On Tue, 26 Jun 2001, Tom Lane wrote: > wsheldah@lexmark.com writes: > > Has there been any substantial change in the way large objects are > > handled with the coming of 7.1 and the expanded row size limit? > > No change in the API (but 7.1 is more efficient under the hood). > > > Assuming things haven't changed for large objects, it appears that to display an > > image, I'll need to: > > 1. select the image from postgresql, using lo_export() to save it to a uniquely > > named temp file (to avoid conflicts with other users). > > If you just need to read the data, lo_export to a file and read the file > is certainly the hard way. Use lo_open/lo_read. > > regards, tom lane > > ---------------------------(end of broadcast)--------------------------- > TIP 6: Have you searched our list archives? > > http://www.postgresql.org/search.mpl >
"Thalis A. Kalfigopoulos" <thalis@cs.pitt.edu> writes: > Where exactly is lo_read ? In libpq and other interface libraries (ie, it's a client-side function). regards, tom lane