2012-01-10 115 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;