2

我有一个users带有列的表user_id,例如。user_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"

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

4

1 回答 1

2

这是Postgres 9.2 修复的一个缺点。
我在这里引用9.2 的发行说明

E.5.3.3。查询

(...)

  • 在运行时为行表达式保留列名 (Andrew Dunstan, Tom Lane)

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

另外,不要user用作表名,即使它只是一个演示。它是每个 SQL 标准和 Postgres 中的保留字,不能在没有双引号的情况下用作表名。我冒昧地修复了 Q 中的测试用例。

于 2013-08-23T16:01:05.743 回答