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

使用bash脚本将CSV文件插入PostgreSQL表,bash,postgresql,shell,csv,insert,Bash,Postgresql,Shell,Csv,Insert,我正在尝试使用bash脚本将CSV文件插入到PSQL表中。我的第一个目标是解析CSV文件,然后逐行插入数据。复制命令对我来说不方便。我使用了下面的脚本,但它不起作用 编辑:顺便说一下,我没有创建表。我应该吗 #!/bin/sh while IFS=, read col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 do echo "INSERT INTO table_

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

编辑:顺便说一下,我没有创建表。我应该吗

#!/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,这将很难做到正确

您应该使用来定义数据库中的外部表。这允许您从数据库访问数据,而无需实际加载数据。在某种程度上,您可以将PostgreSQL转换为CSV解析器


然后,您可以像从普通表中一样从该外部表中进行选择,例如,将其部分插入到适当的PostgreSQL表中。

能否提供有关您的问题的更多信息?你说它不起作用,那么当它不起作用时会发生什么呢?您是否有任何错误?错误:关系表名称在字符13第1行不存在:插入表名称a、b、c、d、e、f、g、h、i、j、k,l值..尝试对字段名使用单引号或转义双引号。@Poshi-错误:单引号后字符18处或附近的“a”处出现语法错误。应转义内部双引号符号。错误:关系表名称不存在第1行:插入表名称。我应该先创建表和列,还是?@Bertug Yes您应该如果任何值包含一个引号,您的解决方案将不起作用。此外,这不包括带引号的字段。