0
я пытаюсь вставить в данных PostgreSQL таблицы из XML Это пример XML:Импорт XML-данных в PostgreSQL
<?xml version="1.0" encoding="UTF-8"?>
<ActualStatuses>
<ActualStatus ACTSTATID="0" NAME="Not actual" />
<ActualStatus ACTSTATID="1" NAME="Актуальный" />
</ActualStatuses>
Для загрузки XML я использую эту функцию:
CREATE OR REPLACE FUNCTION bytea_import(IN p_path text, OUT p_result bytea)
RETURNS bytea AS
$BODY$
declare
l_oid oid;
r record;
begin
p_result := '';
select lo_import(p_path) into l_oid;
for r in (select data
from pg_largeobject
where loid = l_oid
order by pageno) loop
p_result = p_result || r.data;
end loop;
perform lo_unlink(l_oid);
end;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION bytea_import(text)
OWNER TO postgres;
Для значения вставки из XML к PostGreSQL таблице я использую тонкий запрос:
INSERT INTO actualstatuses(
SELECT
(xpath('//ActualStatus/@ACTSTATID', myTempTable))[1]::text::bigint AS ACTSTATID,
(xpath('//ActualStatus/@NAME', myTempTable))[1]::text AS NAME
FROM
unnest(xpath('//ActualStatus', convert_from(public.bytea_import('C:/fias/update/AS_ACTSTAT.XML'), 'utf8')::xml)) AS myTempTable);
И есть ошибка синтаксического анализатора:
invalid XML content
SQL-status: 2200N
Entity: line 1: parser error : XML declaration allowed only at the start of the document
<?xml version="1.0" encoding="utf-8"?><AddressObjectTypes><AddressObjectType
Но если я удалю <?xml version="1.0" encoding="utf-8"?>
в XML, эта работа замечательная. У меня около 20 XML-файлов, некоторые из которых очень большие. Как избавиться от этой ошибки?
Работы для меня;). Пожалуйста, напишите более подробную информацию: особенно, как вы пытаетесь импортировать несколько файлов. –
@ RadekPostołowicz Я создаю для всех файлов sql-запрос, но я думаю, что это можно реализовать через цикл –