【问题标题】:How to specify a tab in a postgres front-end COPY如何在 postgres 前端 COPY 中指定选项卡
【发布时间】:2011-09-01 01:41:34
【问题描述】:

我想使用 psql "\copy" 命令将数据从制表符分隔的文件中提取到 Postgres。我正在使用这个命令:

\copy cm_state from 'state.data' with delimiter '\t' null as ;

但我收到了这个警告(表格实际上加载正常):

WARNING:  nonstandard use of escape in a string literal
LINE 1: COPY cm_state FROM STDIN DELIMITER '\t' NULL AS ';'
HINT:  Use the escape string syntax for escapes, e.g., E'\r\n'.

如果 '\t' 不正确,如何指定选项卡?

【问题讨论】:

  • 试试错误信息提示的内容:\copy cm_state from 'state.data' with delimiter E'\t' null as ';'
  • E 开始一个转义序列。把 E 想象成 C 中的双引号字符串。E'\t' == "\t"。

标签: postgresql csv


【解决方案1】:

E'\t'告诉postgresql里面可能有转义字符:

\copy cm_state from 'state.data' with delimiter E'\t' null as ';'

【讨论】:

  • 谢谢!这也为我解决了信息量较少的错误COPY delimiter must be a single one-byte character。在此处添加它,以便搜索引擎可以找到它。
  • 这应该是另一个带有错误消息的答案。只是为了让搜索引擎把它捡起来:)
【解决方案2】:

你可以这样做copy cm_state from stdin with (format 'text')

【讨论】:

  • 文本文件的默认分隔符是制表符。我用过它,它可以工作。postgresql.org/docs/9.2/static/sql-copy.html
  • 当您想将命令放入 shell 脚本时,这会有所帮助——奇怪的是,$$\t$$ 似乎不起作用。
  • 这适用于pg_dump 生成的数据,没有指定其他选项。
【解决方案3】:

感谢这个 E'\t' 格式。转义字符在导入制表符分隔 (TSV) 数据文件时有效,并且标题不仅在 CSV 中。

这样我已经成功导入了一个 TSV,但仅在此 psql 中使用如下 DELIMITER 选项(包含排除标头)

\COPY mytable FROM 'mydata.tsv' DELIMITER E'\t' CSV HEADER;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 2010-09-22
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多