使用 bash 脚本将 CSV 文件插入 PostgreSQL table

Inserting a CSV file into PostgreSQL table using bash script

我正在尝试使用 bash 脚本将 CSV 文件插入 PSQL table。我的第一个目标是解析 CSV 文件,然后逐行插入数据。 COPY 命令对我来说不方便。我使用了以下脚本,但它不起作用。

编辑:顺便说一句,我没有创建 table。我应该吗?

#!/bin/sh             
    while IFS=, read col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12
    do
        echo "INSERT INTO table_name ("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l") VALUES ('$col1','$col2','$col3','$col4','$col5','$col6','$col7','$col8','$col9','$col10','$col11','$col12');"
    done < ppr.csv | sudo psql -U pg_user -d test;

你应该转义内部双引号:

#!/bin/sh             
while IFS=, read col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12
do
    echo "INSERT INTO table_name (\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\") VALUES ('$col1','$col2','$col3','$col4','$col5','$col6','$col7','$col8','$col9','$col10','$col11','$col12');"
done < ppr.csv | sudo psql -U pg_user -d test;

不要尝试用 bash 解析 CSV,否则很难正确处理。

你应该使用file_fdw在数据库中定义一个外来的table。这允许您访问数据库中的数据而无需实际加载它。在某种程度上,您将 PostgreSQL 变成了 CSV 解析器。

然后你可以 select 从那个外国 table 就像从一个正常的 table 一样,例如将它的一部分插入一个适当的 PostgreSQL table.