Вставка файлов " tsv " в базу данных postgresql


У меня есть несколько файлов, которые сохраняются как tsv. Я хочу вставить их в БД postgresql, чтобы проанализировать их с помощью sql.

Однако, моя проблема заключается в том, как INSERT Этот tsv файлы в postgresql 9.2 под windows 7?

Я ценю ваш ответ!

ПС.: Я создал таблицу с правильными значениями, такими как:

CREATE TABLE ratings (distribution VARCHAR, votes VARCHAR, rank FLOAT, title VARCHAR);

Файл находится в каталоге:

C:/Users/testUser/Desktop/TSV/ratings.list.tsv

4 17

4 ответа:

Для значений, разделенных табуляцией, можно использовать COPY:

Http://www.postgresql.org/docs/current/static/sql-copy.html

В зависимости от точного формата вашего файла, это может быть что-то вроде:

COPY ratings FROM 'C:/Users/testUser/Desktop/TSV/ratings.list.tsv' DELIMITER '\t'

Вы хотите что-то вроде этого:

COPY ratings FROM 'C:/Users/testUser/Desktop/TSV/ratings.list.tsv' DELIMITER E'\t';

Требуется E'\t', иначе вы получите такую ошибку:

Ошибка: разделителем для копирования должен быть один однобайтовый символ


Если столбцы в вашем TSV не совпадают идеально с вашей таблицей, вы также можете определить отображение, выполнив следующее:

COPY ratings (column_1, column_2, ... column_n)
  FROM 'C:/Users/testUser/Desktop/TSV/ratings.list.tsv'
  DELIMITER E'\t';

Грустно говорить,но самый простой способ-преобразовать TSV в CSV. Большинство встроенных утилит импорта Postgres для таких вещей, как преобразование пустых строк в нули, пропуск заголовков и т. д., предназначены только для CSV.

Эта простая 6 строки питона ответа на так. Я использую его, а затем CSV загружается как обычно без проблем в Postgres после попытки в течение часа загрузить TSV.

Я могу сделать это с помощью csvsql из csvkit.

Чтобы прочитать TSV (или CSV) и создать / вставить его в таблицу, мой скрипт командной строки выглядит следующим образом:

csvsql --insert input.tsv  --table table_t --tabs --no-constraints --db postgresql://user:passwd@localhost/mydb