【问题标题】:Is there a way to query the existence of certain keys in a PostgreSQL hstore field using wildcards?有没有办法使用通配符查询 PostgreSQL hstore 字段中某些键的存在?
【发布时间】:2011-08-25 02:14:47
【问题描述】:

我想根据 hstore 列中某些键的存在(或不存在)来过滤 PostgreSQL 9.0 表中的记录。现在,我像这样列出所有个人候选人:

SELECT AVG(array_upper(%# tags,1)) FROM nodes 
WHERE array_upper(%# tags,1) > 0 AND NOT 
tags?|ARRAY['gnis:state_id','gnis:id','gnis:Class','gnis:County',
'gnis:ST_num','gnis:ST_alpha','gnis:County_num','gnis:reviewed',
'gnis:feature_id','gnis:county_name','gnis:import_uuid'];

真正想要做的是计算此列中键值对的平均数量,排除那些包含任何以“gnis: ”。有没有更有效的方法来做到这一点?

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    据我所知hstore 模块不支持您想要的简单形状的通配符。但是实现这样的功能看起来很容易,例如:

    WITH excluded_tags AS
    (
        SELECT array_agg(key) AS tags
        FROM (SELECT skeys(tags) AS key FROM nodes) k
        WHERE key LIKE 'gnis:%'
    )
    SELECT avg(array_upper(%# tags, 1))
    FROM nodes
    WHERE array_upper(%# tags, 1) > 0
        AND NOT tags ?| (SELECT tags FROM excluded_tags);
    

    或更短:

    SELECT avg(array_upper(%# tags, 1))
    FROM nodes 
    WHERE array_upper(%# tags, 1) > 0 AND
        NOT EXISTS (SELECT skeys FROM skeys(tags) WHERE skeys LIKE 'gnis:%');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-17
      • 1970-01-01
      • 1970-01-01
      • 2018-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      相关资源
      最近更新 更多