Inserindo o Wordlist do Crackstation em uma tabela de banco de dados

1

Estou tentando inserir 1,5 bilhão de palavras da Crackstation (15gig) em um tabela de banco de dados. Eu tentei SQLite e Postgres ambos sem sorte até agora através da linha de comando.

Ambos ficam chateados porque os dados parecem conter alguns valores de dados binários espalhados pelo arquivo. Os dados não parecem como apenas caracteres UTF-8.

UltraEdit detecta como UTF-8.
No entanto, o comando do arquivo linux diz:

$  file crackstation.txt -I
crackstation.txt: application/octet-stream; charset=binary

Como posso obter esses dados no Postgres ou no SQLite para que eu possa analisá-los / consultá-los?

Existe uma maneira de limpar / converter os dados primeiro para que a inserção funcione ... ou uma maneira diferente de fazer a importação nos bancos de dados para que funcione?

Veja o que tentei:

SQLite:

sqlite> .mode csv
sqlite> .separator "\n"
sqlite> .import crackstation.txt passwords

A resposta para isso é milhões de unescaped " character mensagens e apenas 1 linha inserida na tabela (que por acaso é apenas um valor de string vazia).

Postgres:

psql> COPY passwords FROM 'crackstation.txt' WITH (FORMAT TEXT, NULL '', ENCODING 'UTF-8');

A resposta para isso é ERROR: invalid byte sequence for encoding "UTF8": 0xf6 blah blah com um número de linha em que foi encontrado. A coisa é, o arquivo txt é 15gig, então eu só consegui abri-lo no UltraEdit e até isso é dolorosamente lento para chegar nessa linha, deletá-lo, rodar o comando psql novamente, enxaguar e repetir ... por isso eu agora estou fazendo a pergunta.

    
por Turgs 13.01.2015 / 14:27

1 resposta

0

Se esse arquivo não tiver nenhuma codificação especificada, convém importá-lo como tal.

Se o alvo é um banco de dados dedicado, no caso do PostgreSQL, você pode criá-lo sem impor qualquer codificação.

Como um comando SQL:

CREATE DATABASE dbname
  encoding 'SQL_ASCII'
  lc_collate= 'C'
  lc_ctype='C'
  template=template0;

As tabelas criadas dentro desse banco de dados aceitarão bytes diferentes de zero sem verificar se correspondem a caracteres em qualquer codificação. As comparações de string serão feitas de maneira sábia.

Se o arquivo contiver também bytes nulos, você precisará removê-los, filtrando-o com tr -d '%code%' ou um comando equivalente para o seu SO.

    
por 07.02.2015 / 15:46