我有一个postgres表(mapfeatures_20120813
),有2列(标签和pky),大约有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
? The documentation没有说什么。
答案 0 :(得分:2)
聚合单个hstore值应该简单如下:
SELECT string_agg(tags::text,',')::hstore
FROM mapfeatures_20120813;
关于标题中的问题:元素数量几乎没有限制。
您的评论:
此外,我在结果中看不到任何模式,它完全混淆了:
The manual有这样的说法:
对的顺序并不重要(可能无法再现 在输出上。)