Аргумент 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). Хотя это и не было исправлено в самом расширении, я предоставил альтернативную (пользовательскую) функцию (см. Ссылку выше).

Другие вопросы по тегам