You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL中引用OSM复合hstore键的第一部分?

解决方案:PostgreSQL HStore筛选以指定前缀开头的键

问题背景

PostgreSQL表m_temp.osm_road的tags列为hstore类型,存储OSM标签(如oneway:bicycle => 'yes'、oneway => 'true')。需要筛选所有键以oneway开头的记录,同时能获取对应键的值。

可行方案

1. 筛选符合条件的记录

使用akeys()函数提取hstore的所有键,结合LIKE ANY匹配前缀,这是最直接且性能较好的方式:

SELECT * FROM m_temp.osm_road
WHERE 'oneway%' LIKE ANY (akeys(tags));

这个语句会匹配所有包含oneway或oneway:xxx这类键的记录,完全覆盖需求。

2. 提取对应键的键值对

如果需要同时获取这些以oneway开头的键及其对应的值,可以用each()函数结合LATERAL展开hstore,再过滤键的前缀:

SELECT 
    t.*, 
    kv.key AS oneway_key, 
    kv.value AS oneway_value
FROM m_temp.osm_road t,
LATERAL each(t.tags) kv
WHERE kv.key LIKE 'oneway%';

这样每条符合条件的键值对都会单独成一行,方便后续处理。

3. 修正正则表达式方案(不推荐)

如果坚持用正则,需要调整匹配规则以覆盖纯oneway的情况,但这种方式需要把hstore转成文本,性能不如原生函数:

SELECT * FROM m_temp.osm_road
WHERE tags::text ~ 'oneway(:|$)';

这里(:|$)表示匹配冒号或者字符串结尾,既匹配oneway:开头的键,也匹配单独的oneway键。


内容的提问来源于stack exchange,提问作者588chm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 16:50:42