如何用aws_s3.query_export_to_s3从RDS/Aurora导出到S3并使用制表符分隔符?
解决Aurora PostgreSQL导出S3时制表符分隔符报错问题
我尝试运行以下SQL代码导出数据到S3:
SELECT * FROM aws_s3.query_export_to_s3( 'SELECT * FROM <tbl> WHERE <cond>', aws_commons.create_s3_uri( '<bucket_name>', '<file_name>', '<region>' ), options :='format csv, HEADER true, delimiter $$\t$$' ) ;
按照AWS文档设置了自定义分隔符,但导出失败,报错:ERROR: COPY delimiter must be a single one-byte character。我认为制表符符合Postgres COPY命令要求,求解决思路。
解决思路:
- 直接输入字面制表符:PostgreSQL的美元引号(
$$)不会解析转义序列,$$\t$$会被当作普通的\t字符串而非制表符。直接在delimiter参数里按Tab键输入实际的制表符,写成delimiter $$ $$(中间是Tab键生成的制表符)。 - 使用转义字符串语法:改用带
E前缀的单引号字符串来启用转义,比如:
这里options := E'format csv, HEADER true, delimiter \'\\t\''E前缀开启转义,\\t会被解析为单字节的制表符。 - 验证分隔符字节值:先执行
SELECT E'\\t'::bytea;确认制表符的字节表示(ASCII码9,对应单字节),确保传递给query_export_to_s3的是符合要求的单字节字符。
内容的提问来源于stack exchange,提问作者kirajano
相关产品推荐
相关产品推荐

