2

我有一个mapfeatures_20120813包含 2 列(标签和 pky)的 postgres 表(),大约 1000 行。每行包含hstore一个主键和一个主键:

   tags (hstore)          pky
"aerialway"=>"cable_car";  1
"aerialway"=>"chair_lift"; 2
"aerialway"=>"drag_lift";  3
"aerialway"=>"gondola";    4
"aerialway"=>"goods";      5
"aerialway"=>"mixed_lift"; 6
"aerialway"=>"pylon";      7
"aerialway"=>"station";    8
"aeroway"=>"aerodrome";    9
"aeroway"=>"apron";        10
...

对于某些分析,我需要将所有这些单个 hstore 键值对推送到一个单个 hstore -row 中,我不知道如何解决这个问题。
因此,我首先将所有行转换为单行文本字段:

CREATE TABLE mf_text AS
SELECT array_to_string(array_agg(tags), ',')
FROM mapfeatures_20120813;

在第二步中,我hstore从这个文本字段中创建了一个:

SELECT hstore(array_to_string)
FROM mf_text

但问题是1000多个键值对中只有97个被写入新的hstore-field。我的结果中也看不到任何模式,它完全混淆了:

"atv"=>"no", "hgv"=>"forestry", "lit"=>"no", "psv"=>"private"
, "area"=>"yes", "boat"=>"permissive"  

一个字段是否存在某种限制,即有hstore多少键值对适合单个字段hstore文档什么也没说。

4

1 回答 1

2

聚合单个 hstore 值应该很简单:

SELECT string_agg(tags::text,',')::hstore
FROM   mapfeatures_20120813;

至于标题中的问题:元素的数量几乎没有限制。

对于您的评论:

我的结果中也看不到任何模式,它完全混淆了:

手册中有这样说:

对的顺序不重要(并且可能不会在输出时复制)。

于 2012-11-16T15:59:52.847 回答