【问题标题】:Postgresql load file csv with new line charactersPostgresql用换行符加载文件csv
【发布时间】:2021-01-28 15:36:20
【问题描述】:

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

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

但它报告我一个错误。

如何删除换行符?

【问题讨论】:

  • 报告什么错误?
  • 这是错误:“(”或“(”)处的语法错误 - SQL 状态:42601 - 字符:180

标签: postgresql csv newline


【解决方案1】:

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

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

COPY mytable FROM PROGRAM 'demangle D:\zzz\aaa20.csv' (FORMAT 'csv');

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-01-23
      • 2021-12-16
      • 1970-01-01
      • 2015-05-09
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 2022-10-08
      相关资源
      最近更新 更多