Thread: lo_import() of an empty file

lo_import() of an empty file

From
Bruce Momjian
Date:
I have just discovered if you try to lo_import() an empty file, and oid
is returned, but nothing is added to pg_largeobject:

    $ > /rtmp/a
    $ psql test

    SELECT lo_import('/rtmp/a');
     lo_import
    -----------
         16385
    
    SELECT * from pg_largeobject;
     loid | pageno | data
    ------+--------+------

However, the oid is incremented for each call:

    SELECT lo_import('/rtmp/a');
     lo_import
    -----------
         16386
    
    SELECT lo_import('/rtmp/a');
     lo_import
    -----------
         16387
    
    SELECT lo_import('/rtmp/a');
     lo_import
    -----------
         16388

An lo_export() of a non-existant oid does create an empty file.  I guess
this is an optimization of allowing empty file imports to consume no
space in pg_largeobject, but it does seem odd.

I am asking hackers in case someone can see an error here, or something
that should be documented.

-- 
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

+ As you are, so once was I.  As I am, so you will be. +
+                      Ancient Roman grave inscription +


Re: lo_import() of an empty file

From
Tom Lane
Date:
Bruce Momjian <bruce@momjian.us> writes:
> I have just discovered if you try to lo_import() an empty file, and oid
> is returned, but nothing is added to pg_largeobject:

Why would you expect there to be?  There's no data to store.

There should be an entry in pg_largeobject_metadata, though.

            regards, tom lane


Re: lo_import() of an empty file

From
Bruce Momjian
Date:
On Fri, Mar 30, 2018 at 02:22:49PM -0400, Tom Lane wrote:
> Bruce Momjian <bruce@momjian.us> writes:
> > I have just discovered if you try to lo_import() an empty file, and oid
> > is returned, but nothing is added to pg_largeobject:
> 
> Why would you expect there to be?  There's no data to store.
> 
> There should be an entry in pg_largeobject_metadata, though.

Ah, yes, there is a row there.  Thanks.  No problem here.

-- 
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

+ As you are, so once was I.  As I am, so you will be. +
+                      Ancient Roman grave inscription +