Thread: ...

...

From
Shra
Date:
Hi all,

I have a problem with metadata.........just read this .......

Let us simply suppose a table "test" with 2 fileds "name (varchar(10))" and
"age (numeric)" and there b values as name="abc",age="20".

Now in a function i need to develop a list where the column header info has
to b made in this format i.e., as "column name, column type, column
width".........

am getting the column name using PQfname function, column type using PQftype
and column size using PQfsize....... am also able to get each filed values n
their size correctly..........

but the problem now is ......when i use PQfsize to get the column header size
then i get a -1 if the field is a variable length in nature else i get the
exact size........i.e., in the above declared table for both the name and age
being variable fields am getting -1 for their size.......now i need some
mechanism to get 10 for "name" header and number of bytes allocated for
"age"(30,6).......is their any way to overcome this problem?

Is this a draw back in Postgre? Is there any way i can get the exact size
that i allocated when creating the table.....infact most of the other
databases do provide APIs with not having this problem........can anyone help
me, please.........

Shra


Re: [BUGS]

From
Tom Lane
Date:
Shra <shravan@yaskatech.com> writes:
> [ where to get declared-length info for var-length columns ]

This is encoded in the atttypmod field (see PQfmod).  I'd recommend
using format_type() to decode the info, but if you don't mind possibly
having to change your code from time to time, you could just wire
knowledge of the interpretation of typmod into your code.

In future, kindly be more selective about the lists you cross-post to.
I generally make a practice of ignoring questions posted to the bugs
list, for example.
        regards, tom lane


MetaData (size of datatype)

From
Shra
Date:
Hi tom,

how to decode the atttypmod field........when i allocate 10 it shows it as 14 
n for 20 it shows it as 24.......my problem is not just with 
varchar........it is for all fields that has variable length .........the 
same atttypmod returns -1 for integer? am confused........

I want the size allocated for each field i a table whether its a var-length 
or fixed length........

Shra

On Saturday 27 April 2002 20:37, you wrote:
> Shra <shravan@yaskatech.com> writes:
> > [ where to get declared-length info for var-length columns ]
>
> This is encoded in the atttypmod field (see PQfmod).  I'd recommend
> using format_type() to decode the info, but if you don't mind possibly
> having to change your code from time to time, you could just wire
> knowledge of the interpretation of typmod into your code.
>
> In future, kindly be more selective about the lists you cross-post to.
> I generally make a practice of ignoring questions posted to the bugs
> list, for example.
>
>             regards, tom lane

-- 
Shra



Re: MetaData (size of datatype)

From
Shra
Date:
Hi Hannu,

> -1 is given for types that are of fixed size and whose length can be
> read from pg_type.typlen for that type.

I don't think so...jsut look into this file pq_type.h.... it says.........
*****************************************************************typlen is the number of bytes we use to represent a
valueof this type, e.g. 
 
4 for an int4.  But for a variable length type, typlen is -1
*****************************************************************

-1 is for variable length n not for fixed length.........this point is very 
clear even in documentation..........

now how to find length for a numeric, varchar or anyother one that has 
variable length where the system PQfsize returns -1.........?

As tom said.....The type is encoded in the atttypmod field (see PQfmod) and 
recommended using format_type().....
but when this is used, it returns -1 for integer , real n other fixed 
datatypes .........

any better way , please.........

Shra



Re: MetaData (size of datatype)

From
Hannu Krosing
Date:
On Mon, 2002-04-29 at 13:16, Shra wrote:
> Hi Hannu,
> 
> > -1 is given for types that are of fixed size and whose length can be
> > read from pg_type.typlen for that type.
> 
> I don't think so...jsut look into this file pq_type.h.... it says.........
> *****************************************************************
>  typlen is the number of bytes we use to represent a value of this type, e.g. 
> 4 for an int4.  But for a variable length type, typlen is -1
> *****************************************************************
> 
> -1 is for variable length n not for fixed length.........this point is very 
> clear even in documentation..........

Yes, it in pg_type.typlen it is -1 is for variable length and actual
length for fixed-length types

in pg_attribute.attypmod it is -1 for _fixed_ length types and actual
length for variable length types (actual length = defined length + 4
bytes of length bytes)

> now how to find length for a numeric, varchar or anyother one that has 
> variable length where the system PQfsize returns -1.........?
> 
> As tom said.....The type is encoded in the atttypmod field (see PQfmod) and 
> recommended using format_type().....
> but when this is used, it returns -1 for integer , real n other fixed 
> datatypes .........

so do as Tom said - 

if   PQfsize returns -1
then   use  PQfmod
else   use PQfsize

-----------
Hannu



Re: MetaData (size of datatype)

From
Tom Lane
Date:
Shra <shravan@yaskatech.com> writes:
> As tom said.....The type is encoded in the atttypmod field (see PQfmod) and 
> recommended�using format_type().....
> but when this is used, it returns -1 for integer , real n other fixed 
> datatypes .........

The interpretation of typmod is datatype-specific.  That's why I
recommended using format_type.  But if you want to know what format_type
knows, look at the source code (src/backend/utils/adt/format_type.c).
        regards, tom lane