В настоящее время я оптимизирую синтаксический анализатор xml, где у меня есть узкое место при массовой вставке 10 000 записей в массив xml в postgres.Эта версия postgres не поддерживает xmltable.Следующий код - это то, что у меня сейчас есть:
create unlogged table xmltable(
xml_element1 xml[],
xml_element2 xml[],
xml_element3 xml[]
);
v_xml := XMLPARSE(DOCUMENT convert_from(src_blob, 'UTF8') );
INSERT INTO xmltable ( xml_element1, xml_element2, xml_element3)
SELECT
(xpath ('element1parent/element1feature', x_xml)),
(xpath ('element2parent/element2feature', x_xml)),
(xpath ('element3parent/element3feature', x_xml)),
FROM (SELECT unnest(xpath('/Root/grandparent',v_xml)) as x_xml);
drop table xmltable;
Current processing time is about 4 minutes for xml_element1 = 40 inserts,
xml_element2 = 9,980 inserts, xml_element3 = 0 inserts.
Несколько вещей, которые я пробовал:
Переключение между временной и незарегистрированной таблицей. Разбиение запроса с помощью v_xml: = convert_from (src_blob,'UTF8') :: xml
Любое понимание будет с благодарностью!