代码之家  ›  专栏  ›  技术社区  ›  Jonas

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

  •  2
  • Jonas  · 技术社区  · 12 年前

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

    以下是一些打印件 行描述 以下为:

    [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] 2 columns
    data: 2
    data: Jonas
    [DataRow] 2 columns
    data: 76
    data: Anders
    

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

    1 回复  |  直到 12 年前
        1
  •  5
  •   araqnid    12 年前

    objId 是指 pg_type.oid 用于列类型。23是 int4 1043是 varchar ( select * 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的解释是特定类型的。