Carregando CSV grande no Postgres

4

Estou tentando carregar um CSV com cerca de 100 milhões de registros (cerca de 8 GB no disco) no Postgres por meio do comando copy : copy mytable from 'path/to/myfile.csv' with CSV; Tenho monitorado o progresso verificando o tamanho da tabela reportada no pgAdmin e comparando com o tamanho CSV. Eu sei que vai ser uma comparação fraca na melhor das hipóteses, e eu adoraria ouvir se há uma maneira melhor de monitorar o progresso.

Aqui está o problema: essa carga vem acontecendo há bastante tempo (acho que é muito longa) e, enquanto continuo verificando o tamanho da tabela, o carregamento parece estar desacelerando. Ou seja, demora muito mais para carregar novos 100 MB de dados do que anteriormente na carga. Por quê?

Existe algum ajuste, configuração ou abordagem alternativa que eu possa tomar para uma carga mais rápida que não seja dividir meu CSV em muitos arquivos menores?

Atualização: específicos de esquema / dados

Uma linha de dados representativa:

1234567890,FOOBARF,2010-01-15 03:07:05,0.924700,0.925000

Definição completa do esquema:

CREATE TABLE mytable
(
  id integer NOT NULL,
  rname character varying(7) NOT NULL,
  ts timestamp without time zone NOT NULL,
  stat1 numeric NOT NULL,
  stat2 numeric NOT NULL,
  CONSTRAINT pk_id PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE mytable OWNER TO postgres;
    
por G__ 08.07.2010 / 15:55

1 resposta

1

Você pode ter mais sorte se puder desativar os índices. Mas esta não é uma boa resposta, pois você não forneceu informações suficientes sobre a tabela.

Por favor, poste defn table, constraints, indexes !!! e triggers.

Além disso, você tem certeza de que os dados CSV estão corretos e correspondem à sua tabela?

    
por 08.07.2010 / 19:01