postgreSQL-导入CSV,但列中有逗号

postgreSQL-导入CSV,但列中有逗号,postgresql,csv,Postgresql,Csv,我使用的是postgreSQL 13.0.1版。我必须使用postgre 表结构 CSV文件内容。 第一行是标题,第二行是数据: key ,skey, status , price , date ,priority2 ,man, priority ,comment 1 ,2 , 3 , 45.33 , 1992-02-21 ,4-NOT SPECIFIED ,man#000000058 , 0 ,g

我使用的是postgreSQL 13.0.1版。我必须使用postgre

表结构

CSV文件内容。 第一行是标题,第二行是数据:

key ,skey,  status , price , date       ,priority2        ,man,             priority   ,comment
1   ,2   ,  3      , 45.33 , 1992-02-21 ,4-NOT SPECIFIED  ,man#000000058  , 0          ,ggle. so, whatever you say.
我的问题

错误:

错误可能是由于最后一列包含字符串ggle。所以,随你怎么说。不允许将其标记为字符串。它里面还有一个逗号

我想要的输出是成功地完成查询,并将最后一列作为整个字符串读取。 我也不允许更改文件中的数据

我尝试了以下链接的建议:


但我仍然以上面提到的查询和错误结束。请开导我。

我会间接地做这件事。下面是一个例子:

创建仅包含一个文本列的临时表 创建临时表dropme\u稍后全文; 稍后将文本文件的内容读入dropme\u,将每一整行读入列full\u行 稍后从“D:\orders.csv”复制dropme_ 具有 格式为“csv”, 标题“true”, 分隔符E'\b' ; 请注意,分隔符设置为数据中不出现的字符,即退格

稍后通过查询和最后一列的转换将数据从dropme_传输到public.orders。这使您可以自由灵活地使用select表达式、where子句等。在本例中,首先将每行拆分为一个数组,然后使用数组表达式。 以ta为例 稍后从dropme\u中选择字符串\u到\u数组整行',' 加入公共秩序 选择 a[1]、a[2]、a[3]、a[4]、a[5]、a[6]、a[7]、a[8], 数组_到_stringa[9:11],',' 从t; 希望这有帮助。
一个提示——有一个很好的FDW——在ETL案例中可能会有很大帮助。

类似于:@ChristopherRoussy感谢您的回复。然而,我的查询反映了对线程的回答。但是我仍然得到了上面提到的错误。最好的选择是修复csv。如果字段中有逗号,则需要在字段周围加引号。但是,看起来这实际上可能是固定宽度?如果这是真的,您可以导入整行,然后使用substr将其拆分。感谢您的回复!我尝试了您的建议,但出现了一个错误:错误:列键的类型为整数,但表达式的类型为文本行15:a[1]、a[2]、a[3]、a[4]、a[5]、a[6]、a[7]、a[8],^提示:您需要重写或强制转换表达式。重铸后,我收到一条错误消息:integer类型的输入语法无效:O@xyiong当然,强制转换所有需要相应地生成数字或日期的表达式,即[1]::整数、[2]::整数、[4]::数字、[5]::日期、[8]::整数。请注意,我的回答只是一个例子,具体细节还有待完成。
key ,skey,  status , price , date       ,priority2        ,man,             priority   ,comment
1   ,2   ,  3      , 45.33 , 1992-02-21 ,4-NOT SPECIFIED  ,man#000000058  , 0          ,ggle. so, whatever you say.
COPY public.orders FROM 'D:\orders.csv' WITH (format csv,Header);
ERROR:  extra data after last expected column
CONTEXT:  COPY orders, line 3: "1,2,3,45.33,1992-02-21,4-NOT SPECIFIED,man#000000058,0,ggle. so, whatever you say.
"
SQL state: 22P04