如何从RowDescription消息中查看PostgreSQL列类型?

时间:2012-08-06 13:34:46

标签: postgresql types column-types

我正在为PostgreSQL实现一个驱动程序,并获取RowDescription消息和一些DataRow消息以响应数据库查询。但是如何获取返回列的类型?例如。第一列应为int,第二列为varchar(20)

以下是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

DataRow

[DataRow] 2 columns
data: 2
data: Jonas
[DataRow] 2 columns
data: 76
data: Anders

有什么建议吗?这是我必须在任何系统表中查找的内容吗?

1 个答案:

答案 0 :(得分:3)

objId是对列类型的pg_type.oid的引用。 23是int4而1043是varcharselect * from pg_type where oid in (23,1043)

第二列的类型修饰符应该指示varchar上的限定符,虽然我不太确定为什么它是24而不是20。可能是因为这是返回的varlena结构的长度,其前缀为32位长度。无论如何,这就是typmod的工作原理:如果你select pg_catalog.format_type(1043, 24),你会看到输出是character varying(20)documentation for PQfmod表示typmod解释是特定于类型的。