| Начало » Использование СУБД » PostgreSQL » parallel insert into table (загрузка данных в таблицу из 11000 файлов) Переход к форуму:
	| 
		
			| parallel insert into table [сообщение #748] | Tue, 04 October 2022 07:44  |  
			| 
				
				
					|  danilov_a Сообщений: 1
 Зарегистрирован: October 2022
 | Junior Member |  |  |  
	| Всем доброго дня 
 Искал в инете но пока конкретного ответа (совета) не нашел.
 Задача - загрузить данные в таблицу из примено 11000 CSV файлов
 - перед вставкой из таблицы удалены все индексы и primary key,
 - сделано alter table XXX set unlogged
 Если загружать последовательно (файл за файлом) то это занимает около 7 часов
 Если загружать ОДНИМ большим файлом (в котором содержатся данные из всех тех фалов
 рамер около 20Гб), то около 2-ч часов
 
 Меня заставляют перейти на пофайловую загрузку малых файлов ... т.к.
 их выгрузка (из Ignite) распараллелена и занимает около 1,5 часов
 Вот и мне говорят сделай так же!!! ... но Ignite (database in memory) это не PostgreSQL
 Или все-таки можно както распараллелить insert в PostgreSQL
 
 PS: сейчас каждый файл загружается вот так -
 из пакета postgresql-42.2.18.jar вызывается CopyManager
 ......
 StringBuilder sb;// - содержимое файла
 LibPostgreServer pgJDBC;
 pgJDBC.copyIn("COPY " + table + " FROM STDIN WITH (FORMAT text, DELIMITER '" + delimiter + "', ENCODING 'WIN1251') ", sb.toString());
 
 
 public final long copyIn(String query, String str) {
 long copyRows = 0;
 
 try (ByteArrayInputStream in = new ByteArrayInputStream(str.getBytes())) {
 Connection conn =  LibPostgreServer.getConnection().unwrap(BaseConnection.class );
 CopyManager copyManager = new CopyManager((BaseConnection) conn);
 copyRows = copyManager.copyIn(query, in);
 closeConnection(conn);
 } catch (Exception ex) {
 LibLogger.logMessageThrown(LibLogger.SEVERE, null, ex);
 }
 
 return copyRows;
 }
 
 |  
	|  |  |  
	|  | 
 
 
 Текущее время: Fri Oct 31 09:46:31 GMT+3 2025 
 Общее время, затраченное на создание страницы: 0.01141 секунд |