我有一个postgres 9.6表,其中有一个文本列,其中包含HTML格式的电子邮件内容 . 所以它里面有各种各样的人物 . 我需要将其导出并导入到Redshift数据库中 . 我尝试了各种分隔符的COPY命令 - |,〜^但它仍然失败,因为这些字符是text数据类型 .
我尝试使用封闭引号的CSV,但这导致文本数据跨越多行 . 我运行的一些命令 -
- 从Postgres出口
psql -d messsagedb -c "copy (SELECT body FROM messages limit 3) to STDOUT (DELIMITER '^')
- 在Redshift中导入
COPY public.messages FROM 's3://xxx/messages_stub2.txt' iam_role 'arn:aws:iam::xxx' delimiter '^';
这失败了消息 - 无效时间戳(因为正文中有“^”)
- 使用二进制或csv从postgres导出
psql -d messagedb -c "copy (SELECT body FROM messages limit 3) to STDOUT (format csv) "
- 复制到Redshift失败并显示错误 - “分隔的值缺少结束引用”
以下示例数据 . 当我使用CSV时,电子邮件正文跨越多行 . 所以即使我在COPY中的SELECT语句有一个LIMIT 1,输出也会产生大约50行
"86b599b2-e0fb-4f16-b026-6aedefd52e76","3266841",,"July 15th Skills Camp Update","
<div>
<div style=""clear: both;padding-top: 15px"">
<table cellpadding=""1"" cellspacing=""1"" width=""100%"">
<tbody>
<tr>
<td>
<img alt="""" src=""https://www.frontrush.com//userfiles/591/email%xx.jpg"" style=""width: 933px; height: 350px;"">
<table border=""1"" cellpadding=""1"" cellspacing=""1"" style=""width: 933px;"">
<tbody>
<tr>
<td style=""text-align: center;"">
<br>
<span style=""font-size:72px;""><span style=""font-family:Tahoma,Geneva,sans-serif;""><u>Methodist University Football</u></span></span><br>
<br>
<br>
<br>
<font><span style=""font-size: 48px;"">At this time, the online registration has been closed for the July 15th Camp! Walk-ups are still accepted and welcomed! We look forward to seeing you here.</span></font><br>
关于可以使用的罕见单字节分隔符的任何想法?我可以使用其他任何COPY选项吗?不幸的是,pg_dump不是一个选项,因为我需要在这个表上运行SELECT .
谢谢Murali
1 回答
我喜欢使用ASCII字段分隔符来实现此用途 . 它仍然可能在那里,但我发现它不太可能比任何其他角色 .
示例:
DELIMITER E'\x1f'