Estou carregando um arquivo gigantesco em um banco de dados postgresql. Para fazer isso, primeiro uso split
no arquivo para obter arquivos menores (30 GB cada) e, em seguida, carrego cada arquivo menor no banco de dados usando GNU Parallel
e psql copy
.
O problema é que leva cerca de 7 horas para dividir o arquivo e, em seguida, ele começa a carregar um arquivo por núcleo. O que eu preciso é uma maneira de informar split
para imprimir o nome do arquivo na saída std toda vez que ele terminar de escrever um arquivo, para que eu possa canalizá-lo Parallel
e ele começará a carregar os arquivos no momento em que split
terminar de escrevê-lo. Algo assim:
split -l 50000000 2011.psv carga/2011_ | parallel ./carga_postgres.sh {}
Eu li as split
páginas de manual e não consigo encontrar nada. Existe uma maneira de fazer isso com split
ou qualquer outra ferramenta?