1

PostgreSQLのドライバーを実装していて、データベースクエリに応答してRowDescriptionメッセージといくつかのメッセージを取得します。DataRowしかし、返される列の型を取得するにはどうすればよいですか?たとえば、最初の列はanintで、2番目の列はanである必要があり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

助言がありますか?これは、システムテーブルでルックアップする必要があるものですか?

4

1 に答える 1

5

objIdpg_type.oid列タイプのへの参照です。23int4はで1043はvarcharselect * from pg_type where oid in (23,1043)

2番目の列の型修飾子はvarcharの修飾子を示す必要がありますが、なぜ20ではなく24であるのかはよくわかりません。おそらく、返されるvarlena構造の長さであり、32ビットの長さが付加されているためです。とにかく、それがtypmodの仕組みです。そうするとselect pg_catalog.format_type(1043, 24)、出力が。であることがわかりますcharacter varying(20)。PQfmodのドキュメントには、typmodの解釈はタイプ固有であると記載されています。

于 2012-08-06T15:16:30.120 に答える