I'm implementing a driver to PostgreSQL and gets an RowDescription message and a few DataRow messages in response to a database query. But how do I get the type for the columns returned? E.g. the first column should be an int and the second an varchar(20).
Here are some printouts from RowDescription:
[RowDescription] 2 rows
[Row] id
tableObjId: 16393
attrNr: 1
objId: 23
dataTypeSz: 4
typeModifier: -1
formatCode: 0
[Row] name
tableObjId: 16393
attrNr: 2
objId: 1043
dataTypeSz: -1
typeModifier: 24
formatCode: 0
and for the DataRow:
[DataRow] 2 columns
data: 2
data: Jonas
[DataRow] 2 columns
data: 76
data: Anders
Any suggestions? Is this anything I have to lookup in any systemtables?
objIdis the reference topg_type.oidfor the column type. 23 isint4and 1043 isvarchar(select * from pg_type where oid in (23,1043))The type modifier for the second column should indicate the qualifier on varchar, although I'm not quite sure why it's 24 rather than 20. Probably because that's the length of the varlena structure returned, which has a 32-bit length prepended. Anyway, that's how typmod works: if you do
select pg_catalog.format_type(1043, 24), you'll see that the output ischaracter varying(20). The documentation for PQfmod says that the typmod interpretation is type-specific.