데이터베이스 테이블에 Crackstation의 Wordlist 삽입


1

Crackstation의 15 억 단어 목록 (15gig) 을 데이터베이스 테이블 에 삽입하려고 합니다. 지금까지 커맨드 라인을 통해 SQLite와 Postgres를 모두 운이 없었습니다.

둘 다 데이터에 파일 전체에 흩어져있는 일부 이진 데이터 값이 포함되어있는 것 같습니다. 데이터는 단순한 UTF-8 문자 가 아닌 것 같습니다 .

UltraEdit는이를 UTF-8로 감지합니다.
그러나 linux file 명령은 다음과 같이 말합니다.

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

이 데이터를 Postgres 또는 SQLite로 가져 와서 분석 / 조회 할 수 있습니까?

삽입이 작동하도록 데이터를 먼저 정리 / 변환 할 수있는 방법이 있습니까? 아니면 데이터베이스로 가져 오기를 수행 할 수있는 다른 방법이 있습니까?

내가 시도한 것은 다음과 같습니다.

SQLite :

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

이에 대한 응답은 수백만 개의 unescaped " character메시지이며 테이블에 하나의 행만 삽입됩니다 (빈 문자열 값일뿐).

Postgres :

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

이에 대한 응답 ERROR: invalid byte sequence for encoding "UTF8": 0xf6 blah blah은 찾은 줄 번호입니다. txt 파일은 15gig이므로 UltraEdit에서만 열 수 있었고 심지어 그 줄에 들어가서 삭제하고 psql 명령을 다시 실행하고 헹구고 반복하는 것이 고통 스럽습니다 ... 그래서 왜 지금 질문하고 있어요.

답변:


0

해당 파일에 지정된 인코딩이없는 경우 그대로 가져 오려고 할 수 있습니다.

대상이 전용 데이터베이스 인 경우 PostgreSQL의 경우 인코딩을 적용하지 않고 만들 수 있습니다.

SQL 명령으로 :

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

해당 데이터베이스 내에서 작성된 테이블은 인코딩의 문자와 일치하는지 확인하지 않고 0이 아닌 바이트를 허용합니다. 문자열 비교는 바이트 단위로 수행됩니다.

파일에 널 바이트도 포함되어 있으면 해당 파일을 필터링 tr -d '\0'하거나 해당 OS에 해당하는 명령을 사용하여 파일을 제거해야합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.