【问题标题】:postgres copy with row delimiter带有行分隔符的postgres复制
【发布时间】:2012-04-05 14:23:04
【问题描述】:

我有一个带有列栏的表 foo

foo
---
bar

我使用 Postgres 的 Copy 命令 COPY (select * from foo) TO 'complete_file_path' WITH Delimiter ',' CSV HEADER

现在,如何传递自定义行分隔符?示例

row delimiter = _a_\n

我需要在我的文件中包含以下输出

bar_a_
somevalue_a_
somevalue_a_
somevalue_a_

我不确定如何使用复制命令来做到这一点。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    Postgres COPY TO 没有指定替代行分隔符的选项。您总是可以使用 sed 或您选择的语言进行一些后期处理,以将换行符转换为 "_a_\n"。或者你可以在你的选择中做一些字符串连接:

    COPY (select bar || '_a_' as bar from foo)
      TO 'complete_file_path'
      WITH Delimiter ',' FORMAT CSV HEADER;
    

    【讨论】:

    • 感谢您的建议。我会尝试使用 sed/awk。
    【解决方案2】:

    我不禁想知道,为什么?如果您担心要提取的内容中嵌入的换行符,那么我建议切换到 TEXT 格式,这会将任何嵌入的换行符转义为两个字符“\n”,留下任何 actual 换行符作为明确的记录分隔符。

    TEXT 的一个缺点是你没有得到标题 :-(

    解决那个的一种方法是使用HEADERSLIMIT 0 进行CSV 提取(只是 获取标题),然后执行TEXT 提取。笨重,但一种选择。

    有关TEXT 格式的详细信息,请参阅https://www.postgresql.org/docs/9.4/static/sql-copy.html

    【讨论】:

      猜你喜欢
      • 2014-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 1970-01-01
      相关资源
      最近更新 更多