Thread: More probs with BLOBs
We are getting a strange thing happening if the lo_export(attr, path) destination is a fifo. First, in the normal case, there is output to the file but also feedback to stdout (or somewhere, appearing on the VT screen) of the number 1. ----------- 1 (1 row) Now, if the destination file is a fifo and a psql -c command is given from the shell to lo_export(attr, '/path/to/fifo') we don't get that feedback, but then a cat of the fifo to a normal file (cat fifo > file) writes the BLOB content to the destination file but also sends ----------- 1 (1 row) (or just "1" with psql -t) to the console, apparently (not stderr). So it seems to us that the lo_export output can't be piped (via a named pipe) to another process that reads from the pipe and expects the valid BLOB contents. Beyond my understanding. What is happening here, and can the echoing to the fifo be avoided? Ideas, anyone? (PostgreSQL 9.1.2, Linux 2.6.29.) Elle
On Wed, 15 Aug 2012, Neanderthelle Jones wrote: > So it seems to us that the lo_export output can't be piped (via a > named pipe) to another process that reads from the pipe and expects > the valid BLOB contents. I should have said that the BLOB is a PDF and the file that results from cat fifo >my.pdf is a valid PDF file (containing only an image object) that xpdf displays and prints. But that is after the adornment has gone to the console. Elle
Neanderthelle Jones wrote: > We are getting a strange thing happening if the lo_export(attr, path) > destination is a fifo. > > First, in the normal case, there is output to the file but also > feedback to stdout (or somewhere, appearing on the VT screen) of the > number 1. > > ----------- > 1 > (1 row) > > Now, if the destination file is a fifo and a psql -c command is given > from the shell to lo_export(attr, '/path/to/fifo') we don't get that > feedback, but then a cat of the fifo to a normal file (cat fifo > > file) writes the BLOB content to the destination file but also sends > > ----------- > 1 > (1 row) > > (or just "1" with psql -t) to the console, apparently (not stderr). > > So it seems to us that the lo_export output can't be piped (via a > named pipe) to another process that reads from the pipe and expects > the valid BLOB contents. > > Beyond my understanding. What is happening here, and can the echoing > to the fifo be avoided? Ideas, anyone? > > (PostgreSQL 9.1.2, Linux 2.6.29.) It works fine here (9.1.3 on 2.4.21): $ mkfifo fifo && chmod 0777 fifo $ psql -U postgres test#> \lo_import '/path/to/some/bmp' lo_import 47248 test#> \q $ psql -U postgres -c "SELECT lo_export(47248, '/path/to/fifo')" >out 2>err & $ cat fifo >f $ file f f: PC bitmap data, Windows 3.x format, 173 x 115 x 8 $ cat out lo_export ----------- 1 (1 row) The file "err" is empty. Yours, Laurenz Albe