Импорт xml файла в postgres для чайников - PullRequest
0 голосов
/ 27 апреля 2020

Я проверял, как импортировать файл xml (около 1,3 ГБ) в postgres, однако у меня нет опыта, и я немного затрудняюсь следовать советам, поэтому я искал, если у кого-то есть пошаговый источник или информация.

Сначала я создал новую базу данных, а затем я создал новый скрипт, и я искал и пробовал следующие 2 кода, которые я тестировал, чтобы проверить, есть ли какие-либо из них будет работать, кто-нибудь есть подсказку, что я могу попробовать? Извините за фиктивный вопрос:

  1. https://www.postgresql.org/message-id/5D5B211D-317B-4A62-B625-C2D28323DAFD%40gmx.net Здесь появляется следующая ошибка: «ОШИБКА: синтаксическая ошибка в или около» \ "LINE 34: \ lo_import ' C: \ SASUniversityEdition \ myfolders \ cloud \ drugbank ... ^ SQL состояние: 42601 символов: 723 "

    - База данных: drugbank СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ФУНКЦИЮ import.xml_import (loid oid, p_unlink boolean ПО УМОЛЧАНИЮ true) ВОЗВРАЩАЕТСЯ xml ЯЗЫК plpgsql AS $$ объявление содержимого bytea; lfd целое число; lsize integer; begin lfd: = lo_open (loid, 262144); --INV_READ lsize: = lo_lseek (lfd, 0,2); выполнить lo_lseek (lfd, 0,0); содержимое: = loread (lfd, lsize); execute lo_close (lfd);

        if p_unlink then
            perform lo_unlink(loid);
        end if;
    
        return xmlparse(document convert_from(content,'UTF8'));
    end;
    

    $$;

    DROP TABLE ЕСЛИ СУЩЕСТВУЕТ import.xml_data; Создать таблицу INSERT INTO VALUES import.xml_data ('fulldatabase. xml', import.xml_import (: tmp_lo_id, true));

    - банк данных DROP DATABASE;

    банк данных CREATE DATABASE с владельцем = postgres ENCODING = 'UTF8' LC_COLLATE = 'English_United States.1252' LC_CTYPE = 'English_United States.1252' TABLESACE pg_default CONNECTION LIMIT = -1;

  2. как я могу создать новый файл XML из существующей базы данных в базе данных PostgreSQL, используя java Здесь не появляется ошибка , но когда я пытаюсь выбрать из базы данных, таблица tbl не найдена "CREATE FUNCTION

Запрос успешно возвращен в 194 mse c."

    -- Database: drugbank
 CREATE OR REPLACE FUNCTION f_sync_from_xml()
  RETURNS boolean AS
$func$
DECLARE
   datafile text := 'C:\SASUniversityEdition\myfolders\cloud\drugbank_all_full_database\fulldatabase.xml';  -- only relative path in db dir
   myxml    xml  := pg_read_file(datafile, 0, 100000000); -- arbitrary 100 MB
BEGIN
   -- demonstrating 4 variants of how to fetch values for educational purposes
   CREATE TEMP TABLE tmp ON COMMIT DROP AS
   SELECT (xpath('//some_id/text()', x))[1]::text AS id   -- id is unique  
        , f_xml_extract_val('//col1', x)          AS col1 -- one value
        , f_xml_extract_val('//col2/', x, 'all')  AS col2 -- all values incl. dupes
        , f_xml_extract_val('//col3/', x, 'dist') AS col3 -- distinct values
   FROM   unnest(xpath('/xml/path/to/datum', myxml)) x;

   -- 1.) DELETE?

   -- 2.) UPDATE
   UPDATE tbl t
   SET   (  col_1,   col2,   col3) =
         (i.col_1, i.col2, i.col3)
   FROM   tmp i
   WHERE  t.id = i.id
   AND   (t.col_1, t.col2, t.col3) IS DISTINCT FROM
         (i.col_1, i.col2, i.col3);

   -- 3.) INSERT NEW
   INSERT INTO tbl
   SELECT i.*
   FROM   tmp i
   WHERE  NOT EXISTS (SELECT 1 FROM tbl WHERE id = i.id);
END
$func$  LANGUAGE plpgsql;

Большое спасибо

...