Thread: Column Sizes

Column Sizes

From
"Brett Maton"
Date:
Hi NG,

  How do I find out the size of a column ?

  I am retrieving large objects from the pg_largeobject table and creating a
files, I would like to know the length of the data column so that I can
implement buffering instead of writing hundreds of small chunks to disk.

Any help would be appreciated.

Thanks in advance,

 Brett



Re: Column Sizes

From
Adam Ruth
Date:
On Nov 12, 2003, at 11:04 AM, Brett Maton wrote:

> Hi NG,
>
>   How do I find out the size of a column ?
>
>   I am retrieving large objects from the pg_largeobject table and
> creating a
> files, I would like to know the length of the data column so that I can
> implement buffering instead of writing hundreds of small chunks to
> disk.
>
> Any help would be appreciated.
>
> Thanks in advance,
>
>  Brett
>
>

I always check for the size this way:

select sum(length(data)) from pg_largeobject where loid = xxx;

Or if you want to know the size of an individual page:

select pageno, length(data) from pg_largeobject where loid = xxx order
by pageno;

Hope this help,

Adam Ruth


Re: Column Sizes

From
Doug McNaught
Date:
"Brett Maton" <brett.maton@itaccounting.co.uk> writes:

> Hi NG,
>
>   How do I find out the size of a column ?
>
>   I am retrieving large objects from the pg_largeobject table and creating a
> files, I would like to know the length of the data column so that I can
> implement buffering instead of writing hundreds of small chunks to disk.

Funny, there doesn't seem to be an lo_size() function--I was sure
there was one.  I'm not sure if there's a way to find out the size of
a large object without reading it all.

If you just do lo_read() in a loop with a reasonably large buffer it
should be fairly efficient.

-Doug

Re: Column Sizes

From
"Brett Maton"
Date:
Thanks for the answers guys,

  I ran a quick query lastnight select length(data) from pg_largeobject
where loid = xxxx  which prompted my post.

  The query returned 'n' rows of 2048 bytes and an incomplete "page" of say
236, as I wasn't really thinking about it that much I assumed for some
  reason that  the data column was limited to a maximum of 2048 bytes by the
database.  I was hoping to select this value (2048) from a query
  (like \d tablename describes the columns and sizes) to build a buffer
either a) large enough or b) sensibly proportioned.

  Although my question may not be relevant to this particular issue there
are times that I would like to now the size of a particular column, and I
believe
  that it's possible to get this value from the database using a query and
pg_catalog etc, just not sure how to achieve this.

Thanks again,

Brett


"Brett Maton" <brett.maton@itaccounting.co.uk> wrote in message
news:botsl3$tsp$1@news.hub.org...
> Hi NG,
>
>   How do I find out the size of a column ?
>
>   I am retrieving large objects from the pg_largeobject table and creating
a
> files, I would like to know the length of the data column so that I can
> implement buffering instead of writing hundreds of small chunks to disk.
>
> Any help would be appreciated.
>
> Thanks in advance,
>
>  Brett
>
>



Re: Column Sizes

From
Adam Ruth
Date:
On Nov 13, 2003, at 2:47 AM, Brett Maton wrote:

> Thanks for the answers guys,
>
>   I ran a quick query lastnight select length(data) from pg_largeobject
> where loid = xxxx  which prompted my post.
>
>   The query returned 'n' rows of 2048 bytes and an incomplete "page"
> of say
> 236, as I wasn't really thinking about it that much I assumed for some
>   reason that  the data column was limited to a maximum of 2048 bytes
> by the
> database.  I was hoping to select this value (2048) from a query
>   (like \d tablename describes the columns and sizes) to build a buffer
> either a) large enough or b) sensibly proportioned.
>
>   Although my question may not be relevant to this particular issue
> there
> are times that I would like to now the size of a particular column,
> and I
> believe
>   that it's possible to get this value from the database using a query
> and
> pg_catalog etc, just not sure how to achieve this.
>
> Thanks again,
>
> Brett
>
>
> "Brett Maton" <brett.maton@itaccounting.co.uk> wrote in message
> news:botsl3$tsp$1@news.hub.org...
>> Hi NG,
>>
>>   How do I find out the size of a column ?
>>
>>   I am retrieving large objects from the pg_largeobject table and
>> creating
> a
>> files, I would like to know the length of the data column so that I
>> can
>> implement buffering instead of writing hundreds of small chunks to
>> disk.
>>
>> Any help would be appreciated.
>>
>> Thanks in advance,
>>
>>  Bret

The column type for pg_largeobject.data is bytea with no length
specified.  That means, unfortunately, that there's no way to get the
size of the column from the catalog.  It does seem that the large
object functions do split the data into 2k chunks, but it would
probably be a simple thing to check the source to determine if this is
always true.  But it could always change in a future version.

Adam Ruth


Re: Column Sizes

From
Tom Lane
Date:
Adam Ruth <aruth@intercation.com> writes:
> ... It does seem that the large
> object functions do split the data into 2k chunks, but it would
> probably be a simple thing to check the source to determine if this is
> always true.  But it could always change in a future version.

My recollection is that the large object chunk size is defined as BLCKSZ/4,
so you'd get 2K with the default 8K block size, but it could also be
4K or 8K with the other likely choices for block size.

            regards, tom lane

Re: Column Sizes

From
Adam Ruth
Date:
On Nov 12, 2003, at 11:04 AM, Brett Maton wrote:

> Hi NG,
>
>   How do I find out the size of a column ?
>
>   I am retrieving large objects from the pg_largeobject table and
> creating a
> files, I would like to know the length of the data column so that I can
> implement buffering instead of writing hundreds of small chunks to
> disk.
>
> Any help would be appreciated.
>
> Thanks in advance,
>
>  Brett
>
>

I always check for the size this way:

select sum(length(data)) from pg_largeobject where loid = xxx;

Or if you want to know the size of an individual page:

select pageno, length(data) from pg_largeobject where loid = xxx order
by pageno;

Hope this help,

Adam Ruth