回答

收藏

如何使Postgres Copy忽略大txt第一行文件

技术问答 技术问答 396 人阅读 | 0 人回复 | 2023-09-14

我有一个相当大的.txt文件?9gb,我想将此txt文件加载到postgres第一行是标题,然后跟踪所有数据。如果我直接使用它postgres
. l; r3 k0 `9 M! V9 z1 ]* j% QCOPY数据,标题会导致错误,表明数据类型和我postgres手表不匹配,所以我需要以某种方式删除它。
1 i* v7 t3 `# F) ]1 T, v2 d样本数据:ProjectId,MailId,MailCodeId,潜在客户,listid,已邮寄日期,金额,捐赠,zip,zip4,VectorMajor,VectorMinor,packageid,phase,databaseid,amount2
/ N, V! c) I# q" U* l% e( O15,53568419,89734,219906,15,2011-05-11 00:00,0,0,90720,2915,NonProfit,POLICY,230,3,1,016,84141863,87936,164657,243-03-10 0:00,0,0,48362,2523,NonProfit,POLICY,1507、5、1、016、81442028、86632、15181625、243、2011-01-19 0:00,0,0,11501,2115NonProfit,POLICY,1508,2,1,0尽管postgres的COPY函数有标头设置,可以忽略第一行,但只适用于csv文件:
& P* O7 o8 F' l6 o( d% I. Scopy training from 'C:/testCSV.csv' DELIMITER ',' csv header;当我尝试在txt上述代码在文件上运行时出现错误:' R% G, x( A# y1 T9 i8 Z
copy training from 'C:/testTXTFile.txt' DELIMITER ',' csv headerERROR:  unquoted newline found in dataHINT:  Use quoted CSV field to represent newline.试着加 quote”和“ escape属性,但该命令似乎不适用于txt文件:$ o# F. K: U* R% a+ `! W7 v
copy training from 'C:/testTXTFile.txt' DELIMITER ',' csv header quote as E'"'  escape as E'\\N';ERROR:  COPY escape must be a single one-byte character另外,我考虑过操作Java或创建单独的标记表删除第一行…但这些解决方案既耗时又耗时。我只需要加载9gb标题的第一行可以删除数据…还有其他解决方案可以很容易地删除吗?txt为了将数据加载到我的文件的第一行postgres数据库中?
2 n) v: o( m8 y! f9 S                                                                1 |* y+ R6 @$ W3 D! C4 ?
    解决方案:                                                                / f/ p9 ~' P9 u3 R2 N0 f0 A! U1 M& r( }
                                                                结合使用HEADER选项和CSV选项:0 H& K& m4 F: K. l, a% u. P
\copy [table]  from '/source_file.csv' delimiter ',' CSV HEADER ;HEADER指定文件包括标题线,包括文件中每列的名称。输出时,第一行包含表中的列,输入时,第一行被忽略。仅在使用时CSV该选项只能用于格式。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则