暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL copy (指定 QUOTE,ESCAPE,DELIMITER, 分隔符等, 支持ascii单字节字符...) single byte char 的输入

digoal 2018-05-09
3004

作者

digoal

日期

2018-05-09

标签

PostgreSQL , copy , 分隔符 , 包围符号 , 转义 , unicode


背景

PostgreSQL 可以通过COPY批量导入或导出数据,如果是文件操作是在数据库的SERVER端操作,如果是STDIN, STDOUT则是通过协议透传到客户端。

```
Command: COPY
Description: copy data between a file and a table
Syntax:
COPY table_name [ ( column_name [, ...] ) ]
FROM { 'filename' | PROGRAM 'command' | STDIN }
[ [ WITH ] ( option [, ...] ) ]

COPY { table_name [ ( column_name [, ...] ) ] | ( query ) }
TO { 'filename' | PROGRAM 'command' | STDOUT }
[ [ WITH ] ( option [, ...] ) ]

where option can be one of:

FORMAT format_name  
OIDS [ boolean ]  
FREEZE [ boolean ]  
DELIMITER 'delimiter_character'  
NULL 'null_string'  
HEADER [ boolean ]  
QUOTE 'quote_character'  
ESCAPE 'escape_character'  
FORCE_QUOTE { ( column_name [, ...] ) | * }  
FORCE_NOT_NULL ( column_name [, ...] )  
FORCE_NULL ( column_name [, ...] )  
ENCODING 'encoding_name'

```

COPY命令如下,允许用户指定格式,比如分隔符等。

QUOTE

ESCAPE

DELIMITER

以上三个必须是single one-byte字符。如果是特殊字符如何输入呢?

特殊字符作为QUOTE, ESCAPE, DELIMITER

可以使用escape或unicode模式输入特殊字符。

例如TAB作为分隔符时,这样输入

```
postgres=# copy aa from '/home/digoal/aa.csv' with (delimiter U&'\0009');
COPY 10

postgres=# copy aa from '/home/digoal/aa.csv' with (delimiter E'\t');
COPY 10
```

使用ascii可以得到字符的ASCII码

```
postgres=# select ascii(E'\t');
ascii


 9

(1 row)
```

unicode的写法,请参考末尾文档。

参考

《PostgreSQL 转义、UNICODE、与SQL注入》

PostgreSQL 许愿链接

您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.

9.9元购买3个月阿里云RDS PostgreSQL实例

PostgreSQL 解决方案集合

德哥 / digoal's github - 公益是一辈子的事.

digoal's wechat

文章转载自digoal,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论