Dmitriy, I have been building an executable c++ program that uses Postgresql C (libpq) API. All SQL statements were designed to be executed in non-blocking mode and it works fine with postgresql non-blocking interface. I also wanted to handle blob files in non-blocking mode as well.
The size of the blob file (to be inserted) could be from 1M to 1G. If I have to rely on blocking interface, then the current linux process will be blocked by this blob upload operation. (Current project I'm working on doesn't allow multi-threaded applications. We have to implement a single-threaded processes.) This is why I have been trying to find a way to execute blob save/retrieval operation in non-blocking mode. Thank you, Choon Park On Sat, Jan 7, 2012 at 5:05 AM, Dmitriy Igrishin <dmit...@gmail.com> wrote: > Hey ChoonSoo, > > 2012/1/6 ChoonSoo Park <luisp...@gmail.com> > >> I just wonder if there is a way to program lo client interfaces >> (lo_creat, lo_write, lo_read) in non-blocking mode. >> PQsendQueryParams works perfect for executing a sql command in >> non-blocking mode. But I couldn't find a way for handling large objects. >> > These functions uses obsolete fast-path interface to call > these functions on the backend: > dmitigr=> select oid, proname from pg_proc where proname ~ E'^lo_' or > proname in ('loread', 'lowrite'); > oid | proname > ------+------------- > 764 | lo_import > 767 | lo_import > 765 | lo_export > 952 | lo_open > 953 | lo_close > 954 | loread > 955 | lowrite > 956 | lo_lseek > 957 | lo_creat > 715 | lo_create > 958 | lo_tell > 1004 | lo_truncate > 964 | lo_unlink > (13 rows) > > So, you can call these functions using regular SQL > (prepared statements may be used for improving > performance in this case). > >> >> Do you have any example? >> > I can't imagine how (and why) to work with LOs > in asynchronous mode because LOs stored as a > sequence of chunks (the size is usually 4kb) > of the type bytea in the special table. As consequence all > operations on the LOs must be inside an explicitly opened > transaction block. > >> >> Thank you, >> Choon Park >> > > > > -- > // Dmitriy. > > >