我有一个表格users
,其中包含user_id
,user_name
和user_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"
我丢失了列的名称 如何使用第二个示例并使用正确的列名?
答案 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中修复了测试用例。