使用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
相关产品推荐
相关产品推荐

