2012-01-10 57 views
6

的hstore格式有没有更好的方式来获得一个表的行成hstore格式比上年轻松输出表行

SELECT hstore(ARRAY['col1','col2','col3'], ARRAY[col1::text, col2::text, col3::text]) FROM tbl; 

它的工作原理,但我想必须有比一个更好的办法输入每列。 hstore需要记录类型的输入,但我无法弄清楚如何将单行生成查询提供给函数并让它快乐。 Postgres版本9.0.4。

回答

10

是 - 您可以使用hstore()函数将行投射到hstore类型。

SELECT hstore(tbl.*) FROM tbl; 

工作对我来说:

[email protected]=# select hstore(foo.*) from foo; 
     hstore 
------------------------ 
"bar"=>"1", "baz"=>"2" 
(1 row) 

http://www.postgresql.org/docs/9.0/static/hstore.html#HSTORE-FUNC-TABLE

+1

啊!我不认为把表名放在那里。我刚刚尝试了SELECT hstore(*)FROM tbl。谢谢! – EvilAmarant7x 2012-01-10 21:53:30

+1

由于某种原因,单独的'(*)'被解析的方式不同于'(foo。*)'。奇怪,但它是如何工作的。 – filiprem 2012-01-11 06:38:31

-1

而不是*您必须参考表的别名:

SELECT hstore(tbl) FROM tbl; 

与Asterisk其较长的少自显示语法:

SELECT hstore(tbl.*) FROM tbl;