将CSV字符串插入PostgreSQL表

时间:2016-01-25 17:00:43

标签: mysql node.js postgresql csv

我试图将CSV字符串插入PostgreSQL数据库。我不能为我的生活找到一个没有包含文件的答案。我明白了

"\COPY table FROM 'path/to/csv.csv' CSV HEADER"

但是我使用的是Node并且有一个包含以下值的javascript字符串:

"1, 2, 3, 4, 5, 6, 7"

我已经拥有了表模式,而我尝试插入的csv字符串将始终匹配。但是我无法从一个字符串中插入它而我无法从文件中选择它。

谢谢!

3 个答案:

答案 0 :(得分:0)

你试过了吗?

echo "1, 2, 3, 4, 5, 6, 7" | psql -c "COPY table FROM STDIN DELIMITER AS ',' NULL AS ''"

答案 1 :(得分:0)

我必须从我的源流创建一个新的Stream,因为我的源代码的每一行都需要多次插入和一些转换。

为了能够将其推入PostgreSQL,我将其编码回ASCII。

长话短说:

rs.push(`${raw_id}, ${sensor._id}, ${value}, ${date}\r`.toString('ascii'));

答案 2 :(得分:-1)

如果没有更多信息,很难给出完整答案,但如果您的表只有一列,并且您想插入该数字列表,则可以这样做:

 INSERT INTO table VALUES (unnest(string_to_array('1, 2, 3, 4, 5, 6, 7', ', ')));

每个数字会有一行,它们将作为字符串插入。

我怀疑这不是你的目标,所以你可以尝试:

 INSERT INTO table (col_1, col_2, col_3, col_4, col_5, col_6, col_7) 
 SELECT a[1]::int, a[2]::int, a[3]::int, a[4]::int, a[5]::int, a[6]::int, a[7]::int
 FROM (SELECT string_to_array('1, 2, 3, 4, 5, 6, 7', ', ') a) stupid_obligitary_alias;

丑陋,但完成工作并允许从文本到整数的类型转换。

我不打算同时为多行尝试这样做。

string_to_array记录在http://www.postgresql.org/docs/current/static/functions-array.html