Вставка данных из файла tsv из сети в таблицу postgres - PullRequest
1 голос
/ 28 января 2020

Этот вопрос задавался, но я не могу найти правильного решения для этого. Я хотел бы скопировать данные из столбцов, представленных в файле tsv, доступном по веб-ссылке, и вставить их в уже созданную таблицу под схемой.

Я использовал приведенный ниже запрос, но не могу получить какой-либо вывод.

COPY schema.table FROM PROGRAM 'curl "ftp://ftp.ebi.ac.uk/pub/databases/intact/current/various/mutations.tsv"'

COPY schema.table FROM PROGRAM 'wget -q -O - "$@" "ftp://ftp.ebi.ac.uk/pub/databases/intact/current/various/mutations.tsv HEADER TSV DELIMITER '\t'

Любые предложения здесь будут очень полезны.

Ответы [ 2 ]

1 голос
/ 28 января 2020

Я считаю плохой практикой загружать файлы на сервер базы данных, не говоря уже о выполнении внешнего программного обеспечения для этого. Другими словами, не позволяйте вашему серверу баз данных иметь доступ к inte rnet, если это действительно не нужно.

При этом я бы порекомендовал вам загрузить этот файл в свой клиент и загрузить его, используя psql. Он будет работать независимо от того, где вы скачали файл, и вам не придется иметь дело с возможными нарушениями безопасности или разрешениями на чтение / запись на сервере.

Загрузка и импорт файла TSV в два этапа:

$ wget -O mutations.tsv "ftp://ftp.ebi.ac.uk/pub/databases/intact/current/various/mutations.tsv"
$ cat mutations.tsv | psql -d your_db -c "COPY your_table FROM STDIN DELIMITER E'\t'"
0 голосов
/ 28 января 2020

Вы должны использовать формат CSV и символ табуляции в качестве разделителя:

COPY atable
FROM PROGRAM 'curl "ftp://ftp.ebi.ac.uk/pub/databases/intact/current/various/mutations.tsv"'
   (FORMAT 'csv', HEADER, DELIMITER E'\t');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...