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

使用pgrouting createtopology()时rows_where条件报错求助

解决pgr_createTopology中rows_where筛选jsonb标签的问题

问题核心是你误解了rows_where参数的传入方式:这个参数需要的是字符串形式的WHERE子句条件片段,而不是直接写SQL布尔表达式。

正确的调用语句

你可以用两种方式传入条件:

方式1:转义单引号

SELECT pgr_createTopology(
    'berlin.ways', 
    10, 
    id:='way_id', 
    the_geom:='geom', 
    rows_where:='tags @> ''{"subway":"yes"}''::jsonb'
);

方式2:用美元引号(更清晰,避免转义)

SELECT pgr_createTopology(
    'berlin.ways', 
    10, 
    id:='way_id', 
    the_geom:='geom', 
    rows_where:=$$tags @> '{"subway":"yes"}'::jsonb$$
);

错误原因解释

  • 你最初直接写rows_where:=(tags @> '{"subway":"yes"}'::jsonb)时,PostgreSQL会把tags当成当前SELECT语句的列,但当前调用函数的语句里没有FROM子句,所以报错“column 'tags' does not exist”。
  • 改成berlin.ways.tags后,同样因为当前语句没有FROM berlin.ways,数据库找不到这个表的引用,所以报错“missing FROM-clause entry for table "ways"”。

pgr_createTopology内部会把rows_where的字符串拼接到它生成的查询语句中,所以必须传入符合SQL语法的字符串形式的条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:15:38