【问题标题】:What is the maximum number of key value pairs in a single hstore value?单个 hstore 值中键值对的最大数量是多少?
【发布时间】:2012-11-16 15:46:25
【问题描述】:

我有一个 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 什么也没说。

【问题讨论】:

  • 您的标题提出的问题与您的问题主体不同,我在理解您的问题后澄清了这一点。并且一如既往添加PostgreSQL版本。

标签: sql postgresql aggregate-functions hstore


【解决方案1】:

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

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

关于你在标题中的问题:元素的数量实际上没有限制。

您的意见:

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

The manual 有话要说:

对的顺序不重要(并且可能无法复制 输出)。

【讨论】:

  • 感谢您的回复。你的回答解决了我的问题!尽管如此,出于好奇:对 hstore 的键值对是否有限制?
  • @C.B.单个 varlena 字段限制为 1GB (postgresql.org/about),所以我会说这将是您的限制。性能方面的实际限制可能会在此之前出现。测试并查看;我会对结果感兴趣。
  • 有趣的辩论。有关于此事的消息吗?我遇到的最大堆栈深度限制远低于提到的 varlena limited。有没有更好的方法来使用 50k-100k 元素填充 hstore?
猜你喜欢
  • 2016-04-17
  • 2010-10-31
  • 1970-01-01
  • 2015-05-21
  • 2011-06-15
  • 2021-12-25
  • 2011-05-05
  • 2010-09-10
  • 1970-01-01
相关资源
最近更新 更多