jae*_*ard 3 postgresql ascii escaping control-characters delimiter
我们将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
Run Code Online (Sandbox Code Playgroud)
但是我们想知道,是否有可能在"纯"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';
Run Code Online (Sandbox Code Playgroud)
并收到
ERROR: COPY delimiter must be a single one-byte character
Run Code Online (Sandbox Code Playgroud)
尝试在您尝试用作分隔符的序列之前预先设置E. 例如,E'\x1f'而不是'\x1f'.没有E PostgreSQL将读取'\x1f'为四个单独的字符而不是十六进制转义序列,因此错误消息.
有关详细信息,请参阅PostgreSQL手册"使用C风格转义字符串常量".
根据我的测试,以下两项均有效:
echo "copy (select 1 a, 2 b) to stdout with delimiter u&'\\001f'"| psql;
Run Code Online (Sandbox Code Playgroud)
echo "copy (select 1 a, 2 b) to stdout with delimiter e'\\x1f'"| psql;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3680 次 |
| 最近记录: |