Thread: How to obtain the size of a field VARCHAR, NUMERIC(7,2) after a query with libpq?

How to obtain the size of a field VARCHAR, NUMERIC(7,2) after a query with libpq?

From
Gilberto Ribeiro de Queiroz
Date:
I am using the library C of the PostgreSQL "libpq" in some academic projects. I 
am needing to recover the size of the resulting fields of a given 
query so that, if necessary, I create a new table in another database or so that 
my program has this information for posterior use.       
Below, it is an example that I want to do       
Given the tables:    
T1(C1 VARCHAR(89), C2 NUMERIC(7,2))    
T2(C2 NUMERIC(7,2))       
1 - the user executes a consultation like:    
SELECT C1 FROM T1, T2 WHERE T1.C2 = T2.C2 ORDER BY C1    

2 - later he (or she) decides, inside of my program, to export the result for a 
table of another database (like MySQL for example) => Then, I will have to know 
the type (this libpq gives) and the size of each field so that I can create a 
table in MySQL, in the case of this example, I will have to discover that the 
field C1 of the table T1 is a varchar of length "89".

===> How could I get this length ?

Since now i thanks everybody, Gilberto.



Gilberto Ribeiro de Queiroz <gribeiro@dpi.inpe.br> writes:
> I am needing to recover the size of the resulting fields of a given 
> query

You need the type OID and the "typmod" associated with the column.
These are provided by PQftype and PQfmod respectively in libpq.
The cleanest way to get from there to a type description is to
invoke the backend's format_type function, eg (random example)

test71=# select format_type(1700,1704000); format_type
----------------numeric(26,60)
(1 row)

But if you don't want to expend another query to get the answer,
you could hard-wire some knowledge in your program.  Look at the
source code of format_type to see what it knows about typmod
interpretation.
        regards, tom lane