2014-03-13 34 views
1

簡單的問題,但我的搜索fu失敗,所以我甚至不知道這是否可能。Postgres:如何查看hstore列作爲表

我在Postgres中有一張表,叫它key_value_store,帶有一個hstore字段,稱之爲document。此外,我定義的類型,稱之爲key_value_type,其作爲屬性,我想從hstore提取到一個完全成熟的錶行中的字段:

CREATE TYPE key_value_type AS (property1 text, property2 text, property3 text) 

所以我想輸出(最終使用視圖)一個表的列數與key_value_type的屬性一樣多,我需要爲許多屬性組合創建這個表,因此我不想爲每個組合創建一個表。

我試着用:

SELECT populate_record(null::key_value_type, document) FROM key_value_store 

而是組成:

| PROPERTY 1 | PROPERTY 2 | PROPERTY 3 | 
........................................ 
| value 1.1 | value 1.2 | value 1.3 | 
........................................ 
| value 2.1 | value 2.2 | value 2.3 | 
........................................ 
| and so on | and so on | and so on | 
........................................ 

什麼,我得到的是:

| populate_record      | 
........................................ 
| (value 1.1, value 1.2, value 1.3) | 
........................................ 
| (value .1, value 2.2, value 2.3)  | 
........................................ 
| (and so on, and so on, and so on) | 
........................................ 

如何獲得期望的結果從這裏(或來自任何其他地方)? 我注意到,使用表名而不是key_value_type我實際上得到我想要的,但正如我所說,我會避免爲每個需要的屬性組合創建一個表。

回答

2

populate_record()確實如此:它填充記錄

因此,您只能得到一列,而不是三列。

如果你想從記錄中的所有列,你需要明確這樣說:

SELECT (populate_record(null::key_value_type, document)).* 
FROM key_value_store 

SQLFiddle例如:http://sqlfiddle.com/#!15/b6794/1

+0

大聲笑,我已經試圖用三個嵌套查詢最令人費解的解決方案。 :D非常感謝! –

+0

你如何用控制檯,Postgres和Ruby on Rails來做到這一點? –

+0

@Jackson_Sandland:我不使用Ruby。在'psql'中(我假設你是用「console」來表示的),你只需運行該語句即可。正如你對任何其他SQL客戶端所做的一樣。 –