Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 импорт данных из XML файла в SQL Manager Lite for PostgreSQL  [new]
erleug
Member

Откуда:
Сообщений: 41
у меня есть файлы, которые хотел бы импортировать в БД Есть таблица Test с полем xml пытаюсь сделать импорт

COPY
  public."Test"
( 
  "TestXML" 
)
FROM 'D:\file.xml';


Вылетала ошибка

ERROR:  could NOT OPEN file "D:\file.xml" FOR reading: No such file OR directory


Понимаю, что скорее всего проблема в неправильности пути. Решение было в экранировании слэшов в пути к файлу.

COPY    
public."Test"
    (
      "TestXML"
    )
    FROM E'D:\\file.xml';


Файл читает, но теперь проблема в другом, при считывании файла вылетает ошибка

ОШИБКА:  invalid XML content
CONTEXT:  COPY Test, строка 1, колонка TestXML: "<?xml version="1.0" encoding="UTF-8"?>"


Думаю проблема в переносе строки, в скрипте дописываю
DELIMITER '\n'
и вылетает ошибка

ОШИБКА:  разделитель для COPY должен быть однобайтным символом


Также пробовал
WITH DELIMITER AS E'\n'
и все также вылетает ошибка

ОШИБКА:  разделителем для COPY не может быть символ новой строки или возврата каретки


В документациипишется, что команда COPY FROM распознаёт следующие спецпоследовательности: \n, \r и тп. То есть принимать разделитель оно должно. Подскажите, в чем тут ошибка или как можно корректно импортировать данные с XML файла в БД

Сообщение было отредактировано: 21 янв 20, 16:55
21 янв 20, 16:52    [22063781]     Ответить | Цитировать Сообщить модератору
 Re: импорт данных из XML файла в SQL Manager Lite for PostgreSQL  [new]
Troglodit
Member

Откуда:
Сообщений: 498
erleug,

Документация
Заданный файл должен быть доступен пользователю PostgreSQL (тому пользователю, от имени которого работает сервер), и путь к файлу должен задаваться с точки зрения сервера


Сообщение было отредактировано: 21 янв 20, 18:34
21 янв 20, 18:34    [22063835]     Ответить | Цитировать Сообщить модератору
 Re: импорт данных из XML файла в SQL Manager Lite for PostgreSQL  [new]
erleug
Member

Откуда:
Сообщений: 41
Troglodit, сервер находится на моем компе, импорт выполняю через админ права, доступ к файлу есть
22 янв 20, 11:36    [22064247]     Ответить | Цитировать Сообщить модератору
 Re: импорт данных из XML файла в SQL Manager Lite for PostgreSQL  [new]
erleug
Member

Откуда:
Сообщений: 41
вообщем при такой структуре файла импорт работает:

<Root><step>Manufacturing step 1 at this work center</step><step>Manufacturing step 2 at this work center</step></Root>
<Root2><step>Manufacturing step 1 at this work center</step><step>Manufacturing step 2 at this work center</step></Root2>


когда добавляю строчку с кодировкой и версией файла
<?xml version="1.0" encoding="UTF-8"?>
<Root><step>Manufacturing step 1 at this work center</step><step>Manufacturing step 2 at this work center</step></Root>
<Root2><step>Manufacturing step 1 at this work center</step><step>Manufacturing step 2 at this work center</step></Root2>

то выбивает ошибку

ОШИБКА:  invalid XML content
CONTEXT:  COPY Test, строка 1, колонка TestXML: "<?xml version="1.0" encoding="UTF-8"?>"


hex-редактором прошелся, лишних символов в файле нету. Что в таком случае может быть неправильного?

Сообщение было отредактировано: 22 янв 20, 11:46
22 янв 20, 11:46    [22064260]     Ответить | Цитировать Сообщить модератору
 Re: импорт данных из XML файла в SQL Manager Lite for PostgreSQL  [new]
Melkij
Member

Откуда: Санкт-Петербург
Сообщений: 973
Да потому что copy - построчное копирование. Строка файла в строку таблицы.
Поскольку поле TestXML в вашей public."Test" очевидно типа xml - то его входная валидация проглатывает документ без xml декларации (она опциональна), но документ только из xml декларации явно не является корректным xml.

И это вы ещё не нарушили формат ожидаемой строки самого COPY.

Сообщение было отредактировано: 22 янв 20, 12:19
22 янв 20, 12:17    [22064300]     Ответить | Цитировать Сообщить модератору
 Re: импорт данных из XML файла в SQL Manager Lite for PostgreSQL  [new]
Sergej Grischenkow
Member

Откуда:
Сообщений: 73
А если пробел поставить до ?>
22 янв 20, 12:17    [22064302]     Ответить | Цитировать Сообщить модератору
 Re: импорт данных из XML файла в SQL Manager Lite for PostgreSQL  [new]
erleug
Member

Откуда:
Сообщений: 41
Melkij, да столбец типа xml, так в таком случае можно не указывать строку с кодировкой? или нужно сменить тип столбца?
22 янв 20, 12:25    [22064309]     Ответить | Цитировать Сообщить модератору
 Re: импорт данных из XML файла в SQL Manager Lite for PostgreSQL  [new]
Guzya
Member

Откуда:
Сообщений: 415
Сделайте, один xml-документ одна строка в файле.
22 янв 20, 17:05    [22064586]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить