我有一个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。
由于 穆拉利
答案 0 :(得分:0)
我喜欢使用ASCII字段分隔符来实现此用途。它仍然可能在那里,但我发现它不太可能比任何其他角色。
实施例:
DELIMITER E'\x1f'