将查询结果转换为hstore时保留列名称

时间:2013-08-23 15:10:25

标签: json postgresql postgresql-9.1 hstore

我有一个表格users,其中包含user_iduser_nameuser_phone列。

如果我这样做:

select hstore(u) from users u

结果是:

"user_id" => "1", "user_name" => "McEnroe", "user_phone" => "xxx"

如果我这样做:

select hstore(u) from (select user_id, user_name, user_phone from users) u

结果是:

"f1" => "1", "f2" => "McEnroe", "f3" => "xxx"

我丢失了列的名称 如何使用第二个示例并使用正确的列名?

1 个答案:

答案 0 :(得分:2)

这是一个修复了Postgres 9.2 的缺点 我引用release notes for 9.2 here

  

E.5.3.3。查询

     

(...)

     
      
  • 在行运行时保留行名称(Andrew Dunstan,Tom Lane)

         

    当行值转换为hstore或json类型时,此更改允许更好的结果:结果值的字段现在将具有   预期的名字。

  •   

此外,不要使用user作为表名,即使它只是一个演示。它在每个SQL标准和Postgres中都是reserved word,如果没有双引号,则不能用作表名。我冒昧地在Q中修复了测试用例。