Аргумент row_where не передан в pgr_nodenetwork
Я использую pgr_NodeNetwork
функцияpgrouting
расширение для обработки таблицы, содержащей геометрии линейных линий (по существу, дороги).
Синтаксис следующий:
select pgr_nodeNetwork(edge_table:='my_table',
tolerance:=0.0001,
id:='id',
the_geom:='the_geom',
table_ending:='noded',
rows_where:='id < 10',
outall:=false);
В частности, аргументrows_where
используется для обработки только тех строк, для которых выполняется условиеrows_where
правда.
Однако в начале исполнения появляется следующее уведомление:
NOTICE: pgr_nodeNetwork('my_table', 0.0001, 'id', 'the_geom', 'noded', '<NULL>', f)
Вы можете видеть, чтоуведомление не учитываетrows_where
аргумент, который был передан функции (в моем примере это было 'id < 10'
).
Более того, в самой заметке проблема не только в отображении, потому что обработка таблицы с миллионами строк занимает несколько часов, в то время как она должна быть очень быстрой, если условие 'id < 10'
действительно был учтен (потому что это будет таблица с менее чем 10 строками).
С другой стороны, если мы исследуем код самой функции, она начинается с:
CREATE OR REPLACE FUNCTION sig.pgr_nodenetwork(
edge_table text,
tolerance double precision,
id text DEFAULT 'id'::text,
the_geom text DEFAULT 'the_geom'::text,
table_ending text DEFAULT 'noded'::text,
rows_where text DEFAULT ''::text,
outall boolean DEFAULT false)
....
raise notice 'pgr_nodeNetwork(''%'', %, ''%'', ''%'', ''%'', ''%'', %)',
edge_table, tolerance, id, the_geom, table_ending, rows_where, outall;
Если вы определите другую функцию с такими же параметрами и одинаковыми RAISE NOTICE
В начале инструкции вы увидите, что уведомление, выданное функцией, правильно воспроизводит rows_where
аргумент передан пользователем.
Есть ли у кого-нибудь объяснение, почему rows_where
Кажется, аргумент полностью игнорируется функцией pgr_nodeNetwork, а определение совершенно новой функции с точно таким же кодом не дает того же результата?
1 ответ
Кажется, это ошибка ( https://github.com/pgRouting/pgrouting/issues/1074). Хотя это и не было исправлено в самом расширении, я предоставил альтернативную (пользовательскую) функцию (см. Ссылку выше).