首页 > 解决方案 > 如何一次将 101 个 CSV 文件导入我的 PostgreSQL 数据库?

问题描述

我在我的 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)找出如何执行脚本吗?

注意 - 所有文件都将转到同一个表,该表已经存在。

标签: databasepostgresqlcsvfile-uploadpsql

解决方案


考虑到这张表:

CREATE TABLE t (id INT,description TEXT);

以及以下文件

文件 1.csv

id,description 
1,foo

文件2.csv

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)

推荐阅读