使用 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.
我正在尝试使用 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.