Как импортировать 101 файл CSV одновременно в мою базу данных PostgreSQL? - PullRequest
0 голосов
/ 28 мая 2018

На моем терминале MacOS настроен psql.Он подключен к моей базе данных PostgreSQL, работающей через Amazon RDS.

У меня есть 100 CSV-файлов (с именами от 1,2,3,4 до 100).Я хочу массово импортировать их.Я вижу, что есть некоторые сценарии (https://dba.stackexchange.com/questions/168861/import-100-csv-files-into-postgresql/169089#169089),, но я не знаю, как запустить сценарий.

Я попытался скопировать и вставить этот сценарий -

for x in $(ls <folder_name>*.csv); 
do psql -c "copy table_name from '$x' csv" also; done

И яполучил эти ошибки -

db=> for x in $(ls <folder_name>*.csv); 
ERROR:  syntax error at or near "for"
LINE 1: for x in $(ls <folder_name>...
        ^
db=> do psql -c "copy <table_name> from '$x' csv" also; done
ERROR:  syntax error at or near "psql"
LINE 1: do psql -c "copy <table_name> from '$x' csv" also;

Можете ли вы помочь мне а) выяснить правильный сценарий для массового импорта этих файлов и б) выяснить, как выполнить сценарий?

Примечание - все файлы собираются в одну и ту же таблицу, которая уже существует.

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Если вы загружаете все в одну таблицу и если заголовки могут быть исключены, одним из вариантов будет объединение их в один CSV.

bash-$ head -1 /folder_name/file1.csv > combined_file.csv

bash-$ cat folder_name/*.csv | grep -v 'headerpattern' >>combined_file.csv

postgres# COPY yourtable FROM 'combined_file.csv' DELIMITER ','

0 голосов
/ 28 мая 2018

Учитывая эту таблицу:

CREATE TABLE t (id INT,description TEXT);

И следующие файлы

file1.csv

id,description 
1,foo

file2.csv

id,description
2,bar

Выполните следующий сценарий оболочки:

#!/bin/bash
path="/home/user/files/"

for f in $path*.csv;do

    cat $f | psql testdb -c "COPY yourtable FROM STDIN DELIMITER ',' CSV HEADER"

done

И вот у вас есть ваши данные:

$ psql testdb -c "SELECT * FROM t"
 id | description 
----+-------------
  1 | foo
  2 | bar
(2 Zeilen)
...