PostgreSQL copy (quote,DELIMITER,...) single byte char 的输入

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

标签

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注入》

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
6月前
|
存储 SQL 关系型数据库
【MySQL异常】Row size too large (> 1982). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNA
【MySQL异常】Row size too large (> 1982). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNA
63 0
|
8月前
|
SQL 关系型数据库 PostgreSQL
sql中的substring()、to_char()、extract()、concat()等函数
日期数据类型的“substring”并没有很好的定义,因为它取决于数据的外部格式。 在大多数情况下,应该使用extract()或to_char()函数。 通常对于要返回的数据,需要to_char(),并对其进行操作(包括比较) - extract()。有些情况下,这条通用规则不适用,但这些通常是数据结构不是很好的标志。
106 0
|
8月前
|
Oracle 关系型数据库 数据库
Oracle 数据库中字符串函数: SUBSTR()、LENGTH()、LOWER()、UPPER()、TRIM() 。
Oracle 数据库中字符串函数: SUBSTR()、LENGTH()、LOWER()、UPPER()、TRIM() 。
97 1
|
8月前
|
Oracle 关系型数据库 MySQL
MySQL中 CONVERT()函数 ,CAST()函数
MySQL中 CONVERT()函数 ,CAST()函数
74 1
|
XML SQL Oracle
通过wm_concat 函数报错:ora06502-character string buffer to small浅谈wm_concat、Listagg、xmlagg函数的使用和结果不确定性
wm_concat、Listagg、XMLAGG ora06502-character string buffer to small varchar2类型最多支持4000字符(如果是中文会更短到2000) 那无论是wm_concat函数还是listagg函数,在处理超过4000字符(如果是中文会更短到2000)长度的时候都会报错,提供(xmlagg(xmlparse(content 合并字段||',' wellformed) order by 排序字段).getclobval() )给大家使用来解决此问题!
通过wm_concat 函数报错:ora06502-character string buffer to small浅谈wm_concat、Listagg、xmlagg函数的使用和结果不确定性
|
存储 SQL 程序员
【Sql Server】基础之IF ELSE的使用,以及len和substring、convert函数的使用
如果有经常使用触发器或者写存储过程的同学,那么一定不会少用判断语句if_else 假如有一个需求,就是通过语句的方式添加一条记录,添加记录前需要判断当前文本的前60%的文本不能有所重复,其实就是判断某个字段文本不能重复的需求
218 0
【Sql Server】基础之IF ELSE的使用,以及len和substring、convert函数的使用
|
存储 关系型数据库 MySQL
MySQL出现Data too long for column...(错误号1406)和 Data truncated for column...(错误号1265)
MySQL出现Data too long for column...(错误号1406)和 Data truncated for column...(错误号1265)
574 0
MySQL出现Data too long for column...(错误号1406)和 Data truncated for column...(错误号1265)
|
关系型数据库 PostgreSQL
PostgreSQL 填充字符串函数LPAD(s1, len, s2)和RPAD(s1, len, s2)
PostgreSQL 填充字符串函数LPAD(s1, len, s2)和RPAD(s1, len, s2)
326 0
|
存储 JSON Linux
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (ch
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (ch
|
关系型数据库 PostgreSQL
postgresql :pg_read_binary_file插入文件
postgresql :pg_read_binary_file插入文件
200 0
postgresql :pg_read_binary_file插入文件