PostgreSQL- getColumnName不起作用,返回别名Name

Han*_* CR 3 java postgresql jdbc postgresql-9.3

我正在尝试从下面的查询中获取列名,

SELECT
    category as c1,
    forecast_2016,
    category,
    rowcount,
    item_number,
    rowcount,
    category,
    avg_demand_2014_2015,
    category,
    avg_spend_2014_2015,
    avg_demand_2014_2015,
    avg_spend_2014_2015,
    demand_2015
FROM
    ag_instrument_portfolio_master LIMIT 1
Run Code Online (Sandbox Code Playgroud)

Postgres版本是9.3和Java版本1.7,java实现如下.

stmt = con.createStatement();
rs = stmt.executeQuery(query.toString());
ResultSetMetaData columnsMetadata = rs.getMetaData();
int i = 0;
while (i < columnsMetadata.getColumnCount()) {
    i++;
    System.out.println("Name: " + columnsMetadata.getColumnName(i));
    System.out.println("Label: " + columnsMetadata.getColumnLabel(i));
}
Run Code Online (Sandbox Code Playgroud)

输出是

Name: c1
Label: c1
Run Code Online (Sandbox Code Playgroud)

但是,预计是

Name: category
Label: c1
Run Code Online (Sandbox Code Playgroud)

Gor*_*son 5

鉴于此处pgsql-jdbc邮件列表中的注释,您看到的是PostgreSQL JDBC驱动程序的"按设计"行为:

这是驱动程序从服务器返回的信息的限制,它只返回驱动程序随后用于列名和标签的"标签".

与JDBC的许多其他方面一样,给定功能的行为通常可以根据特定JDBC驱动程序的实现而变化.