Postgres:如何将hstore列视为表

时间:2014-03-13 17:17:22

标签: sql postgresql hstore

简单的问题,但我的搜索功能失败,所以我甚至不知道这是否可能。

我在Postgres中有一个表,称之为key_value_store,有一个hstore字段,称之为document。我还定义了一个类型,称之为key_value_type,它具有我想要从hstore中提取的字段作为属性到一个完整的表格行:

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

所以我想输出(最终使用VIEW)一个列,其列数与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我实际上得到了我想要的东西,但正如我所说的,我会避免为我需要的每个属性组合创建一个表。

1 个答案:

答案 0 :(得分:2)

populate_record()完全相同:它填充记录

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

如果您想要记录中的所有列,则需要明确说明:

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

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