Postgresql加载文件csv与新的行字符



我是这个非常有趣的博客的新手。这是我的问题:我必须在postgresql表中加载一个具有三列(field1, field2和field3)的csv文件。在field1列中包含的字符串中有新的行字符。我使用sql语句:

COPY test (regexp_replace (field1,, E '[\n\r] +', '', 'g'),
field2, field3)
from 'D:zzzaaa20.csv' WITH DELIMITER '|';

但是它报告了一个错误。

如何删除新的行字符?

如果换行符通过引用值正确转义,这应该不是问题。

如果您的数据是带有未转义换行符的损坏的CSV文件,则必须进行一些预处理。如果您愿意允许数据库用户在数据库服务器上执行程序,您可以使用

COPY mytable FROM PROGRAM 'demangle D:zzzaaa20.csv' (FORMAT 'csv');

这里,demangle是一个程序或脚本,它读取文件,固定数据并将其输出到标准输出。由于您使用的是Windows,您可能无法访问sedawk之类的工具,因此您可能必须自己编写。

所以,这是COPY命令的语法:

COPY table_name [ ( column_name [, ...] ) ]
FROM { 'filename' | STDIN }
[ [ WITH ] ( option [, ...] ) ]

您只能添加可选的列名列表,而不能添加函数调用(在您的示例中为regexp_replace)或其他一些复杂的结构。

您可以创建一些时态表,将数据导入其中,然后使用顺序INSERT...SELECT查询复制表中的数据。

最新更新