Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 11.02.2019
Сообщений: 14

Импорт данных из XML файла в SQL Manager Lite for PostgreSQL

21.01.2020, 16:45. Показов 5603. Ответов 9

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

SQL
1
2
3
4
5
6
COPY
  public."Test"
( 
  "TestXML" 
)
FROM 'D:\file.xml';
Вылетала ошибка
SQL
1
ERROR:  could NOT OPEN file "D:\file.xml" FOR reading: No such file OR directory
Понимаю, что скорее всего проблема в неправильности пути. Решение было в экранировании слэшов в пути к файлу.

SQL
1
2
3
4
5
6
COPY    
public."Test"
    (
      "TestXML"
    )
    FROM E'D:\\file.xml';
Файл читает, но теперь проблема в другом, при считывании файла вылетает ошибка

SQL
1
2
ОШИБКА:  invalid XML content
CONTEXT:  COPY Test, строка 1, колонка TestXML: "<?xml version="1.0" encoding="UTF-8"?>"
Думаю проблема в переносе строки, в скрипте дописываю
SQL
1
DELIMITER '\n'
и вылетает ошибка

SQL
1
ОШИБКА:  разделитель для COPY должен быть однобайтным символом
Также пробовал
SQL
1
WITH DELIMITER AS E'\n'
и все также вылетает ошибка

SQL
1
ОШИБКА:  разделителем для COPY не может быть символ новой строки или возврата каретки
В документации пишется, что команда COPY FROM распознаёт следующие спецпоследовательности: \n, \r и тп. То есть принимать разделитель оно должно. Подскажите, в чем тут ошибка
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.01.2020, 16:45
Ответы с готовыми решениями:

Импорт данных из excel файла в базу данных PostgreSQL
Приветствую, форумчане! Есть задание написать программу на delphi,которая импортирует данные из файла excel в БД PostgreSQL. Проблема в...

Импорт данных из XML файла
Добрый день! Я новичок в Qt. Хочу спросить, каким способом можно организовать импорт данных из XML файлов? Мне уже говорили о Rest...

Импорт данных из XML файла
Есть ХМЛ файл В нем есть таблица с записями Нужно импортировать ее в программу и затем вызывать из нее некоторые данные (что-то вроде...

9
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
21.01.2020, 21:47
a) DELIMETER вам не поможет.
б) если пишет invalid content, значит где-то действительно что-то не так.
посмотрите hex-редактором на содержимое файла, может какие-то странные символы затесались
(BOM по-моему тоже не распознается).
в) для копирования в таблицу концы строк из файла придется удалить.

ну и не мешает ВСЕГДА писать версию PG, в которой вы делаете все эти эксперименты.

Добавлено через 8 минут
пункт в) точнее так.

конец строки - это разделитель записей (для справки DELIMETER - это разделитель полей)
COPY загружает данные в таблицы в виде записей, каждая из которых может состоять из полей.
вы загружаете в таблицу из одного поля - значит одна строка - одна запись.
соответственно, если XML элемент (со свом содержимым) не помещается в строку, то будет ошибка парсинга

Поясню...

так ошибка
Code
1
2
3
4
5
<?xml version="1.0" encoding="UTF-8"?>
<element>
<subelement attr="XYZ"><item>ABC</item></subelement></element>
<element><subelement attr="XYZ"><item>ABC</item></subelement></element>
<element><subelement attr="XYZ"><item>ABC</item></subelement></element>
а так норм
Code
1
2
3
4
<?xml version="1.0" encoding="UTF-8"?>
<element><subelement attr="XYZ"><item>ABC</item></subelement></element>
<element><subelement attr="XYZ"><item>ABC</item></subelement></element>
<element><subelement attr="XYZ"><item>ABC</item></subelement></element>
1
0 / 0 / 0
Регистрация: 11.02.2019
Сообщений: 14
22.01.2020, 11:45  [ТС]
то есть, если у меня структура файла такая:
XML
1
2
3
4
5
<?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>
верным вариантом будет ?
XML
1
2
<?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>
Добавлено через 34 минуты
вообщем при такой структуре файла импорт работает:

XML
1
2
<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
1
2
3
<?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>
то выбивает ошибку
XML
1
2
ОШИБКА:  invalid XML content
CONTEXT:  COPY Test, строка 1, колонка TestXML: "<?xml version="1.0" encoding="UTF-8"?>"
hex-редактором прошелся, лишних символов в файле нету. Что в таком случае может быть неправильного?
0
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
22.01.2020, 20:15
Цитата Сообщение от erleug Посмотреть сообщение
Что в таком случае может быть неправильного?
Попробуйте сторонним парсером проверить. invalid XML content в коде PG возвращает, когда libxml2 вернул NULL или error при парсинге текста. Значит действительно что-то не так.
Больше ничего не приходит в голову.
Выложите сюда что-ли файл или на файл-обменник. Посмотрю.
0
0 / 0 / 0
Регистрация: 11.02.2019
Сообщений: 14
23.01.2020, 10:50  [ТС]
мой файлик закинул на файлообменник, тут не дает закинуть
0
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
23.01.2020, 21:59
все заносится с ?xml? и без него (конец строки надо учитывать - будет пустая запись)
рассказывайте номер версии ПГ, показывайте по шагам что и как делаете.
0
0 / 0 / 0
Регистрация: 11.02.2019
Сообщений: 14
24.01.2020, 12:41  [ТС]
SQL Manager Lite for PostgreSQL 5.5.1 и сервер PostgreSQL 9.4.

выполняю запрос

XML
1
2
3
4
5
6
COPY
  public."Test"
(
  "TestXML"
)
FROM E'D:\\file.xml';
файл лежит на диске, где и сервер.
Вылетает ошибка
XML
1
2
ОШИБКА:  invalid XML content
CONTEXT:  COPY Test, строка 1, колонка TestXML: "<?xml version="1.0" encoding="UTF-8"?>"
Больше ничего не делаю
Миниатюры
Импорт данных из XML файла в SQL Manager Lite for PostgreSQL  
0
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
24.01.2020, 18:24
Лучший ответ Сообщение было отмечено erleug как решение

Решение

Цитата Сообщение от erleug Посмотреть сообщение
PostgreSQL 9.4.
Ну вот сразу бы сказали, что вы любитель старины
Или совсем уберите заголовок XML
Или подтяните строчку с первым элементом к заголовку.

Уже не помню, что и как там меняли в логике работы COPY, какие баги закрывали.
Но в 9.4 только так можно.

<?xml version="1.0" encoding="UTF-8"?><element><subelement attr="XYZ"><item>ABC</item></subelement></element>
<element><subelement attr="XYZ"><item>ABC</item></subelement></element>
<element><subelement attr="XYZ"><item>ABC</item></subelement></element>

В вашем примере перенос строки говорит COPY, что данные записи закончились.
XML, состоящий только из декларации заголовка, не считается валидным,
поэтому закономерное invalid XML content.
1
0 / 0 / 0
Регистрация: 11.02.2019
Сообщений: 14
27.01.2020, 12:45  [ТС]
спасибо, а в более новых версиях, я так понимаю все должно ок работать?
0
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
27.01.2020, 23:33
Все таки я был неправ. Посмотрел код еще раз внимательно.
С 9.6 версии точно, дальше в прошлое не смотрел, стали разрешать "пустой XML".
То есть заголовок может быть, а содержимого нет. Формально - это невалидный XML (классические парсеры и чекеры не должны это пропускать). Но в PG сделали, что можно. Уже не знаю по каким причинам.
В результате
# для 9.4 - будет невалидный XML
Code
1
2
3
4
5
6
7
psql (9.4.25)
Type "help" for help.
 
postgres=# select '<?xml version="1.0" ?>'::xml;
ERROR:  invalid XML content
LINE 1: select '<?xml version="1.0" ?>'::xml;
               ^
# старшие версии - сделают пустой XML
Code
1
2
3
4
5
6
7
8
9
10
psql (12.1)
Type "help" for help.
 
test=> select '<?xml version="1.0" ?>'::xml;
 xml 
-----
 
(1 row)
 
test=>
какое из этих поведений Вас больше устроит/не устроит - не могу сказать.

С точки зрения обработки через COPY (каждая строчка - каждая запись) я бы убрал XML заголовок. Он все равно не играет никакой роли при заливке через COPY.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.01.2020, 23:33
Помогаю со студенческими работами здесь

Импорт данных из xml-файла
Добрый день. Есть такая задача: Есть xml файл в котором есть перечень сотрудников. Нужно циклом из этого файла фамилию каждого...

Импорт данных из xml-файла в mysql
Здравствуйте, подскажите пожалуйста, как можно импортировать данные из xml-файла в mysql. &lt;ROW DATA=&quot;19.06.2003&quot;...

Импорт данных из XML файла в DataGridView
Как сделать импорт данных из XML файла в DataGridView? Как читать и загружать xml файл разобрался, но как именно передать в колонки ...

Импорт данных из большого файла XML в DBF
доброго времени суток! требуется перегнать XML файл в dbf, сложность в том, что XML довольно большой и целиком его обрабатывать...

Импорт данных из xml файла в sdf файл
Создаю sdf пустой, хочу скопировать туда выбранную пользователем xml (допустим через диалог пользователь выбирает xml файл на диске, и при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru