首页 文章

使用COPY命令导出Postgres 9.6 text数据类型

提问于
浏览
0

我有一个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 回答

  • 0

    我喜欢使用ASCII字段分隔符来实现此用途 . 它仍然可能在那里,但我发现它不太可能比任何其他角色 .

    示例: DELIMITER E'\x1f'

相关问题