Начало » Использование СУБД » 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; 
    }  
		
		
		
 |  
	| 
		
	 | 
 
 
 |  
	| 
		
 |   
Переход к форуму:
 
 Текущее время: Tue Nov 04 10:49:46 GMT+3 2025 
 Общее время, затраченное на создание страницы: 0.00666 секунд 
 |