postgresql - 使用 ASCII 31 字段分隔符作为 Postgresql COPY 分隔符

标签 postgresql escaping ascii delimiter control-characters

我们正在将 Postgres 9.3 中的数据导出到一个文本文件中,以供 Spark 提取。

我们希望使用 ASCII 31 字段分隔符而不是\t 作为分隔符,这样我们就不必担心转义问题。

我们可以在这样的 shell 脚本中这样做:

#!/bin/bash
DELIMITER=$'\x1F'
echo "copy ( select * from table limit 1) to STDOUT WITH DELIMITER '${DELIMITER}'" | (psql ...) > /tmp/ascii31

但我们想知道,是否可以在“纯”postgres 中指定一个不可打印的字形作为分隔符?

编辑:我们尝试根据 http://www.postgresql.org/docs/9.3/static/sql-syntax-lexical.html 使用 postgres 转义约定

warehouse=> copy ( select * from table limit 1) to STDOUT WITH DELIMITER '\x1f';

收到了

ERROR:  COPY delimiter must be a single one-byte character

最佳答案

尝试在您尝试用作定界符的序列之前添加 E。例如 E'\x1f' 而不是 '\x1f'。如果没有 E,PostgreSQL 会将 '\x1f' 读取为四个单独的字符,而不是十六进制转义序列,因此会出现错误消息。

参见 the PostgreSQL manual on "String Constants with C-style Escapes"获取更多信息。

关于postgresql - 使用 ASCII 31 字段分隔符作为 Postgresql COPY 分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28568747/

相关文章:

django - 如何使用 django 使用 datefield 检索数据?

database - Elixir/Ecto 无法识别模型中的外键

grails - 如何在Grails脚手架_form模板中逃避<%%> block

java - 如何在字符串中伪装转义字符 -\"

ruby-on-rails-3 - Rails 和 PostgreSQL 的 Having 问题

sql - Hypertable 与 HBase 以及 BigTable 与 SQL

html - 如何使用 XPath 选择包含单引号的元素?

http - 什么是可见的 ASCII 字符?

windows - 试图更换;使用 cmd 文件在 txt 文件中使用 ASCII 控制字符

javascript - 间断和非间断空格 ascii 字符的区别