Вставьте файлы `tsv` в postgresql db
У меня есть несколько файлов, которые сохраняются как tsv. Я хочу вставить их в db postgresql
, чтобы проанализировать их с помощью sql.
Однако моя проблема заключается в том, как INSERT
этот tsv файл в postgresql 9.2
в windows 7
?
Я ценю ваш ответ!
PS: Я создал таблицу с правильными значениями, например:
CREATE TABLE ratings (distribution VARCHAR, votes VARCHAR, rank FLOAT, title VARCHAR);
файл находится в каталоге:
C:/Users/testUser/Desktop/TSV/ratings.list.tsv
Ответы
Ответ 1
Для значений, разделенных вкладкой, вы можете использовать COPY:
http://www.postgresql.org/docs/current/static/sql-copy.html
В зависимости от точного формата вашего файла это может быть примерно так:
COPY ratings FROM 'C:/Users/testUser/Desktop/TSV/ratings.list.tsv' DELIMITER '\t'
Ответ 2
Вы хотите что-то вроде этого:
COPY ratings FROM 'C:/Users/testUser/Desktop/TSV/ratings.list.tsv' DELIMITER E'\t';
Требуется E'\t'
, иначе вы получите сообщение об ошибке:
ОШИБКА: DELIMITER для COPY должен быть одним однобайтовым символом
Если столбцы вашего TSV не соответствуют вашей таблице, вы также можете определить отображение, выполнив следующие действия:
COPY ratings (column_1, column_2, ... column_n)
FROM 'C:/Users/testUser/Desktop/TSV/ratings.list.tsv'
DELIMITER E'\t';
Ответ 3
Скажем, но самый простой способ - преобразовать TSV в CSV. Большинство встроенных утилит импорта Postgres, чтобы делать такие вещи, как преобразование пустых строк в нули, пропуски заголовков и т.д., Только для CSV.
Посмотрите этот простой 6-строчный ответ Python на SO. Я использую его, а затем CSV загружается, как обычно, без проблем в Postgres после попытки и часа для загрузки TSV.
Ответ 4
Я могу сделать это с помощью csvsql из csvkit.
Чтобы прочитать TSV (или CSV) и создать/вставить его в таблицу, моя командная строка script выглядит так:
csvsql --insert input.tsv --table table_t --tabs --no-constraints --db postgresql://user:[email protected]/mydb