issue with lo_lseek - it returns 4
Hi,
I'm trying to get lo size via libpq before starting reading it (postgres
server 8.3.5). lo_lseek always returns 4 (actual size is > 1M).
I query table with "select photo from employee where id='xxxx'". It returns
lo oid integer as expected. Then I use following code to obtain size of the
lo object:
int lobj_fd = lo_open(conn, lobjId, INV_READ); // returns valid fd, ok
lo_lseek(conn, lobj_fd, 0L, SEEK_END );
size = lo_tell(conn, lobj_fd); // always returns 4, error?
Is it possible to obtain lo object size before reading it?
Thank you
Konstantin
I found the reason - it was bug in my code when inserting lo object. It's
size was actually 4.
Please ignore or delete my post.
On Wed, Jun 17, 2009 at 11:38 AM, Konstantin Izmailov
<kizmailov@gmail.com>wrote:
Show quoted text
Hi,
I'm trying to get lo size via libpq before starting reading it (postgres
server 8.3.5). lo_lseek always returns 4 (actual size is > 1M).
I query table with "select photo from employee where id='xxxx'". It returns
lo oid integer as expected. Then I use following code to obtain size of the
lo object:
int lobj_fd = lo_open(conn, lobjId, INV_READ); // returns valid fd, oklo_lseek(conn, lobj_fd, 0L, SEEK_END );
size = lo_tell(conn, lobj_fd); // always returns 4, error?Is it possible to obtain lo object size before reading it?
Thank you
Konstantin
Out of curiosity, what if lo object has size > 4GB, how lo_tell return its
size? Looks like this is an interface issue.
I found a post dated back to 1998, when somebody pointed it out and a
posgres developer promised to fix it.
Thank you all
On Wed, Jun 17, 2009 at 3:15 PM, Konstantin Izmailov <pgfizm@gmail.com>wrote:
Show quoted text
I found the reason - it was bug in my code when inserting lo object. It's
size was actually 4.
Please ignore or delete my post.On Wed, Jun 17, 2009 at 11:38 AM, Konstantin Izmailov <
kizmailov@gmail.com> wrote:Hi,
I'm trying to get lo size via libpq before starting reading it (postgres
server 8.3.5). lo_lseek always returns 4 (actual size is > 1M).
I query table with "select photo from employee where id='xxxx'". It
returns lo oid integer as expected. Then I use following code to obtain size
of the lo object:
int lobj_fd = lo_open(conn, lobjId, INV_READ); // returns valid fd,
oklo_lseek(conn, lobj_fd, 0L, SEEK_END );
size = lo_tell(conn, lobj_fd); // always returns 4, error?Is it possible to obtain lo object size before reading it?
Thank you
Konstantin
Konstantin Izmailov <pgfizm@gmail.com> writes:
Out of curiosity, what if lo object has size > 4GB, how lo_tell return its
size? Looks like this is an interface issue.
That's simple: it can't have such a size.
Allowing LOs bigger than 2GB is on the TODO list, but don't hold your
breath. Most people who are interested in objects that large are
storing them out in the filesystem anyway.
regards, tom lane
It would be great to remove the limitation. I can image various
possibilities if Postgres can handle larger lo objects. For example, to
stream HD content from DB to a multimedia device for displaying.
Would that be technically hard to do? My impression is that lo has pretty
scalable implementation already.
On Wed, Jun 17, 2009 at 4:05 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
Show quoted text
Konstantin Izmailov <pgfizm@gmail.com> writes:
Out of curiosity, what if lo object has size > 4GB, how lo_tell return
its
size? Looks like this is an interface issue.
That's simple: it can't have such a size.
Allowing LOs bigger than 2GB is on the TODO list, but don't hold your
breath. Most people who are interested in objects that large are
storing them out in the filesystem anyway.regards, tom lane