我在MacOS终端上设置了psql。它连接到我通过Amazon RDS运行的PostgreSQL数据库。
我有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;
你能帮助我a)找出正确的脚本来批量导入这些文件吗?b)弄清楚如何执行脚本?
注意 - 所有文件都将转到已存在的同一个表中。
答案 0 :(得分:1)
考虑此表:
CREATE TABLE t (id INT,description TEXT);
以下文件
id,description
1,foo
id,description
2,bar
执行以下shell脚本:
#!/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)
答案 1 :(得分:0)
如果要将所有内容加载到同一个表中,并且可以排除标题,则可以选择将它们连接到单个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 ','