From e5e25ce7b1635a232dd9713067c7b8da23ce68d0 Mon Sep 17 00:00:00 2001
From: unknown <895543892@qq.com>
Date: Sat, 26 Nov 2022 10:43:39 +0800
Subject: [PATCH 1/4] content/zh/docs/Developerguide/COPY.md
---
content/zh/docs/Developerguide/COPY.md | 3 +-
content/zh/docs/Developerguide/COPY.md.bak | 659 +++++++++++++++++++++
2 files changed, 661 insertions(+), 1 deletion(-)
create mode 100644 content/zh/docs/Developerguide/COPY.md.bak
diff --git a/content/zh/docs/Developerguide/COPY.md b/content/zh/docs/Developerguide/COPY.md
index d3f0542ec..07c778c17 100644
--- a/content/zh/docs/Developerguide/COPY.md
+++ b/content/zh/docs/Developerguide/COPY.md
@@ -299,7 +299,8 @@ COPY FROM从一个文件拷贝数据到一个表,COPY TO把一个表的数据
>- quote参数不能和分隔符、null参数相同。
>- quote参数只能是单字节的字符。
>- 推荐不可见字符作为quote,例如0x07、0x08、0x1b等。
-
+ >- 例如quote e'\x22' :使用ASCII编码为16进制22的字符。
+
- ESCAPE
CSV格式下,用来指定逃逸字符,逃逸字符只能指定为单字节字符。
diff --git a/content/zh/docs/Developerguide/COPY.md.bak b/content/zh/docs/Developerguide/COPY.md.bak
new file mode 100644
index 000000000..d3f0542ec
--- /dev/null
+++ b/content/zh/docs/Developerguide/COPY.md.bak
@@ -0,0 +1,659 @@
+# COPY
+
+## 功能描述
+
+通过COPY命令实现在表和文件之间拷贝数据。
+
+COPY FROM从一个文件拷贝数据到一个表,COPY TO把一个表的数据拷贝到一个文件。
+
+## 注意事项
+
+- 当参数enable\_copy\_server\_files关闭时,只允许初始用户执行COPY FROM FILENAME或COPY TO FILENAME命令,当参数enable\_copy\_server\_files打开,允许具有SYSADMIN权限的用户或继承了内置角色gs\_role\_copy\_files权限的用户执行,但默认禁止对数据库配置文件、密钥文件、证书文件和审计日志执行COPY FROM FILENAME或COPY TO FILENAME,以防止用户越权查看或修改敏感文件。
+- COPY只能用于表,不能用于视图。
+- COPY TO需要读取的表的select权限,copy from需要插入的表的insert权限。
+- 如果声明了一个字段列表,COPY将只在文件和表之间拷贝已声明字段的数据。如果表中有任何不在字段列表里的字段,COPY FROM将为那些字段插入缺省值。
+- 如果声明了数据源文件,服务器必须可以访问该文件;如果指定了STDIN,数据将在客户前端和服务器之间流动,输入时,表的列与列之间使用TAB键分隔,在新的一行中以反斜杠和句点(\\.)表示输入结束。
+- 如果数据文件的任意行包含比预期多或者少的字段,COPY FROM将抛出一个错误。
+- 数据的结束可以用一个只包含反斜杠和句点(\\.)的行表示。如果从文件中读取数据,数据结束的标记是不必要的;如果在客户端应用之间拷贝数据,必须要有结束标记。
+- COPY FROM中\\N为空字符串,如果要输入实际数据值\\N ,使用\\\\N。
+
+- COPY FROM不支持在导入过程中对数据做预处理(比如说表达式运算、填充指定默认值等)。如果需要在导入过程中对数据做预处理,用户需先把数据导入到临时表中,然后执行SQL语句通过运算插入到表中,但此方法会导致I/O膨胀,降低导入性能。
+- COPY FROM在遇到数据格式错误时会回滚事务,但没有足够的错误信息,不方便用户从大量的原始数据中定位错误数据。
+- COPY FROM/TO适合低并发,本地小数据量导入导出。
+- 目标表存在trigger,支持COPY操作。
+
+## 语法格式
+
+- 从一个文件拷贝数据到一个表。
+
+ ```
+ COPY table_name [ ( column_name [, ...] ) ]
+ FROM { 'filename' | STDIN }
+ [ [ USING ] DELIMITERS 'delimiters' ]
+ [ WITHOUT ESCAPING ]
+ [ LOG ERRORS ]
+ [ LOG ERRORS DATA ]
+ [ REJECT LIMIT 'limit' ]
+ [ [ WITH ] ( option [, ...] ) ]
+ | copy_option
+ | [ FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) ]
+ | [ TRANSFORM ( { column_name [ data_type ] [ AS transform_expr ] } [, ...] ) ];
+ ```
+
+ > **说明:**
+ >语法中的FIXED FORMATTER \( \{ column\_name\( offset, length \) \} \[, ...\] \)以及 \[ \( option \[, ...\] \) | copy\_option \[ ...\] \] 可以任意排列组合。
+
+- 把一个表的数据拷贝到一个文件。
+
+ ```
+ COPY table_name [ ( column_name [, ...] ) ]
+ TO { 'filename' | STDOUT }
+ [ [ USING ] DELIMITERS 'delimiters' ]
+ [ WITHOUT ESCAPING ]
+ [ [ WITH ] ( option [, ...] ) ]
+ | copy_option
+ | [ FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) ];
+
+ COPY query
+ TO { 'filename' | STDOUT }
+ [ WITHOUT ESCAPING ]
+ [ [ WITH ] ( option [, ...] ) ]
+ | copy_option
+ | [ FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) ];
+ ```
+
+ > **说明:**
+ >1. COPY TO语法形式约束如下:
+ > \(query\)与\[USING\] DELIMITER不兼容,即若COPY TO的数据来自于一个query的查询结果,那么COPY TO语法不能再指定\[USING\] DELIMITERS语法子句。
+ >2. 对于FIXED FORMATTTER语法后面跟随的copy\_option是以空格进行分隔的。
+ >3. copy\_option是指COPY原生的参数形式,而option是兼容外表导入的参数形式。
+ >4. 语法中的FIXED FORMATTER \( \{ column\_name\( offset, length \) \} \[, ...\] \)以及 \[ \( option \[, ...\] \) | copy\_option \[ ...\] \] 可以任意排列组合。
+
+ 其中可选参数option子句语法为:
+
+ ```
+ FORMAT format_name
+ | OIDS [ boolean ]
+ | DELIMITER 'delimiter_character'
+ | NULL 'null_string'
+ | HEADER [ boolean ]
+ | FILEHEADER 'header_file_string'
+ | FREEZE [ boolean ]
+ | QUOTE 'quote_character'
+ | ESCAPE 'escape_character'
+ | EOL 'newline_character'
+ | NOESCAPING [ boolean ]
+ | FORCE_QUOTE { ( column_name [, ...] ) | * }
+ | FORCE_NOT_NULL ( column_name [, ...] )
+ | ENCODING 'encoding_name'
+ | IGNORE_EXTRA_DATA [ boolean ]
+ | FILL_MISSING_FIELDS [ boolean ]
+ | COMPATIBLE_ILLEGAL_CHARS [ boolean ]
+ | DATE_FORMAT 'date_format_string'
+ | TIME_FORMAT 'time_format_string'
+ | TIMESTAMP_FORMAT 'timestamp_format_string'
+ | SMALLDATETIME_FORMAT 'smalldatetime_format_string'
+ ```
+
+ 其中可选参数copy\_option子句语法为:
+
+ ```
+ OIDS
+ | NULL 'null_string'
+ | HEADER
+ | FILEHEADER 'header_file_string'
+ | FREEZE
+ | FORCE NOT NULL column_name [, ...]
+ | FORCE QUOTE { column_name [, ...] | * }
+ | BINARY
+ | CSV
+ | QUOTE [ AS ] 'quote_character'
+ | ESCAPE [ AS ] 'escape_character'
+ | EOL 'newline_character'
+ | ENCODING 'encoding_name'
+ | IGNORE_EXTRA_DATA
+ | FILL_MISSING_FIELDS
+ | COMPATIBLE_ILLEGAL_CHARS
+ | DATE_FORMAT 'date_format_string'
+ | TIME_FORMAT 'time_format_string'
+ | TIMESTAMP_FORMAT 'timestamp_format_string'
+ | SMALLDATETIME_FORMAT 'smalldatetime_format_string'
+ ```
+
+
+## 参数说明
+
+- **query**
+
+ 其结果将被拷贝。
+
+ 取值范围:一个必须用圆括弧包围的SELECT或VALUES命令。
+
+- **table\_name**
+
+ 表的名称(可以有模式修饰)。
+
+ 取值范围:已存在的表名。
+
+- **column\_name**
+
+ 可选的待拷贝字段列表。
+
+ 取值范围:如果没有声明字段列表,将使用所有字段。
+
+- **STDIN**
+
+ 声明输入是来自标准输入。
+
+- **STDOUT**
+
+ 声明输出打印到标准输出。
+
+- **FIXED**
+
+ 打开字段固定长度模式。在字段固定长度模式下,不能声明DELIMITER、NULL、CSV选项。指定FIXED类型后,不能再通过option或copy\_option指定BINARY、CSV、TEXT等类型。
+
+ > **说明:**
+ >定长格式定义如下:
+ >1. 每条记录的每个字段长度相同。
+ >2. 长度不足的字段以空格填充,数字类型字段左对齐,字符字段右对齐。
+ >3. 字段和字段之间没有分隔符。
+
+- **\[USING\] DELIMITER 'delimiters'**
+
+ 在文件中分隔各个字段的字符串,分隔符最大长度不超过10个字节。
+
+ 取值范围:不允许包含\\.abcdefghijklmnopqrstuvwxyz0123456789中的任何一个字符。
+
+ 缺省值:在文本模式下,缺省是水平制表符,在CSV模式下是一个逗号。
+
+- **WITHOUT ESCAPING**
+
+ 在TEXT格式中,不对'\\'和后面的字符进行转义。
+
+ 取值范围:仅支持TEXT格式。
+
+- **LOG ERRORS**
+
+ 若指定,则开启对于COPY FROM语句中数据类型错误的容错机制。
+
+ 取值范围:仅支持导入(即COPY FROM)时指定。
+
+ > **说明:**
+ >
+ >此容错选项的使用限制如下:
+ >
+ >- 此容错机制仅捕捉COPY FROM过程中数据库主节点上数据解析过程中相关的数据类型错误(DATA\_EXCEPTION)。
+ >- COPY已有的容错选项(如IGNORE\_EXTRA\_DATA)开启时,对应类型的错误会按照已有的方式处理而不会报出异常,因此错误表也不会有相应数据。
+
+- **LOG ERRORS DATA**
+
+ LOG ERRORS DATA和LOG ERRORS的区别:
+
+ 1. LOG ERRORS DATA会填充容错表的rawrecord字段。
+ 2. 只有supper权限的用户才能使用LOG ERRORS DATA参数选项。
+
+ > **注意:**
+ >使用**“LOG ERRORS DATA”**时,若错误内容过于复杂可能存在写入容错表失败的风险,导致任务失败。
+
+
+- **REJECT LIMIT** **'imit'**
+
+ 与LOG ERROR选项共同使用,对COPY FROM的容错机制设置数值上限,一旦此COPY FROM语句错误数据超过选项指定条数,则会按照原有机制报错。
+
+ 取值范围:正整数(1-INTMAX),'unlimited'(无最大值限制)
+
+ 缺省值:若未指定LOG ERRORS,则会报错;若指定LOG ERRORS,则默认为0。
+
+ > **说明:**
+ >如上述LOG ERRORS中描述的容错机制,REJECT LIMIT的计数也是按照执行COPY FROM的数据库主节点上遇到的解析错误数量计算,而不是数据库节点的错误数量。
+
+- **FORMATTER**
+
+ 在固定长度模式中,定义每一个字段在数据文件中的位置。按照column\(offset,length\)格式定义每一列在数据文件中的位置。
+
+ 取值范围:
+
+ - offset取值不能小于0,以字节为单位。
+ - length取值不能小于0,以字节为单位。
+
+ 所有列的总长度和不能大于1GB。
+
+ 文件中没有出现的列默认以空值代替。
+
+- **OPTION \{ option\_name ' value ' \}**
+
+ 用于指定兼容外表的各类参数。
+
+ - FORMAT
+
+ 数据源文件的格式。
+
+ 取值范围:CSV、TEXT、FIXED、BINARY。
+
+ - CSV格式的文件,可以有效处理数据列中的换行符,但对一些特殊字符处理有欠缺。
+ - TEXT格式的文件,可以有效处理一些特殊字符,但无法正确处理数据列中的换行符。
+ - FIXED格式的文件,适用于每条数据的数据列都比较固定的数据,长度不足的列会添加空格补齐,过长的列则会自动截断。
+ - BINARY形式的选项会使得所有的数据被存储/读作二进制格式而不是文本。 这比TEXT和CSV格式的要快一些,但是一个BINARY格式文件可移植性比较差。
+
+ 缺省值:TEXT
+
+ - DELIMITER
+
+ 指定数据文件行数据的字段分隔符。
+
+ > **说明:**
+ >
+ >- 分隔符不能是\\r和\\n。
+ >
+ >- 分隔符不能和null参数相同,CSV格式数据的分隔符不能和quote参数相同。
+ >
+ >- TEXT格式数据的分隔符不能包含:小写字母、数字和特殊字符.\\。
+ >
+ >- 数据文件中单行数据长度需<1GB,如果分隔符较长且数据列较多的情况下,会影响导出有效数据的长度。
+ >
+ >- 分隔符推荐使用多字符和不可见字符。多字符例如'$^&';不可见字符例如0x07、0x08、0x1b等。
+
+ 取值范围:支持多字符分隔符,但分隔符不能超过10个字节。
+
+ 缺省值:
+
+ - TEXT格式的默认分隔符是水平制表符(tab)。
+ - CSV格式的默认分隔符为“,”。
+ - FIXED格式没有分隔符。
+
+ - NULL
+
+ 用来指定数据文件中空值的表示。
+
+ 取值范围:
+
+ - null值不能是\\r和\\n,最大为100个字符。
+ - null值不能和分隔符、quote参数相同。
+
+ 缺省值:
+
+ - CSV格式下默认值是一个没有引号的空字符串。
+ - 在TEXT格式下默认值是\\N。
+
+ - HEADER
+
+ 指定导出数据文件是否包含标题行,标题行一般用来描述表中每个字段的信息。header只能用于CSV、FIXED格式的文件中。
+
+ 在导入数据时,如果header选项为on,则数据文本第一行会被识别为标题行,会忽略此行。如果header为off,而数据文件中第一行会被识别为数据。
+
+ 在导出数据时,如果header选项为on,则需要指定fileheader。如果header为off,则导出数据文件不包含标题行。
+
+ 取值范围:true/on、false/off。
+
+ 缺省值:false
+
+ - QUOTE
+
+ CSV格式文件下的引号字符。
+
+ 缺省值:双引号
+
+ > **说明:**
+ >
+ >- quote参数不能和分隔符、null参数相同。
+ >- quote参数只能是单字节的字符。
+ >- 推荐不可见字符作为quote,例如0x07、0x08、0x1b等。
+
+ - ESCAPE
+
+ CSV格式下,用来指定逃逸字符,逃逸字符只能指定为单字节字符。
+
+ 缺省值:双引号。当与quote值相同时,会被替换为'\\0'。
+
+ - EOL 'newline\_character'
+
+ 指定导入导出数据文件换行符样式。
+
+ 取值范围:支持多字符换行符,但换行符不能超过10个字节。常见的换行符,如\\r、\\n、\\r\\n(设成0x0D、0x0A、0x0D0A效果是相同的),其他字符或字符串,如$、\#。
+
+ > **说明:**
+ >
+ >- EOL参数只能用于TEXT格式的导入导出,不支持CSV格式和FIXED格式导入。为了兼容原有EOL参数,仍然支持导出CSV格式和FIXED格式时指定EOL参数为0x0D或0x0D0A。
+ >
+ >- EOL参数不能和分隔符、null参数相同。
+ >
+ >- EOL参数不能包含:.abcdefghijklmnopqrstuvwxyz0123456789。
+
+ - FORCE\_QUOTE \{ \( column\_name \[, ...\] \) | \* \}
+
+ 在CSV COPY TO模式下,强制在每个声明的字段周围对所有非NULL值都使用引号包围。NULL输出不会被引号包围。
+
+ 取值范围:已存在的字段。
+
+ - FORCE\_NOT\_NULL \( column\_name \[, ...\] \)
+
+ 此函数指定的列将不会把输入匹配(识别)为 null 字符串。null 值字符串将被默认为空字符串,即长度为零的字符串而不是 null,即使它们没有用引号引起来。
+ 此选项仅允许在“COPY FROM”语句中,并且仅在指定为 CSV 格式时被允许使用。
+
+
+ 取值范围:已存在的字段。
+
+ - ENCODING
+
+ 指定数据文件的编码格式名称,缺省为当前数据库编码格式。
+
+ - IGNORE\_EXTRA\_DATA
+
+ 若数据源文件比外表定义列数多,是否会忽略对多出的列。该参数只在数据导入过程中使用。
+
+ 取值范围:true/on、false/off。
+
+ - 参数为true/on,若数据源文件比外表定义列数多,则忽略行尾多出来的列。
+ - 参数为false/off,若数据源文件比外表定义列数多,会显示如下错误信息。
+
+ ```
+ extra data after last expected column
+ ```
+
+ 缺省值:false。
+
+ > **须知:**
+ >
+ >如果行尾换行符丢失,使两行变成一行时,设置此参数为true将导致后一行数据被忽略掉。
+
+ - COMPATIBLE\_ILLEGAL\_CHARS
+
+ 导入非法字符容错参数。此语法仅对COPY FROM导入有效。
+
+ 取值范围:true/on、false/off。
+
+ - 参数为true/on,则导入时遇到非法字符进行容错处理,非法字符转换后入库,不报错,不中断导入。
+ - 参数为false/off,导入时遇到非法字符进行报错,中断导入。
+
+ 缺省值:false/off
+
+ > **说明:**
+ >
+ >导入非法字符容错规则如下:
+ >
+ >(1)对于'\\0',容错后转换为空格;
+ >
+ >(2)对于其他非法字符,容错后转换为问号;
+ >
+ >(3)若compatible\_illegal\_chars为true/on标识导入时对于非法字符进行容错处理,则若NULL、DELIMITER、QUOTE、ESCAPE设置为空格或问号则会通过如“illegal chars conversion may confuse COPY escape 0x20”等报错信息提示用户修改可能引起混淆的参数以避免导入错误。
+
+ - FILL\_MISSING\_FIELDS
+
+ 当数据加载时,若数据源文件中一行的最后一个字段缺失的处理方式。
+
+ 取值范围:true/on、false/off。
+
+ 缺省值:false/off
+
+ - DATE\_FORMAT
+
+ 导入对于DATE类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
+
+ 取值范围:合法DATE格式。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
+
+ > **说明:**
+ >
+ >对于DATE类型内建为TIMESTAMP类型的数据库,在导入的时候,若需指定格式,可以参考下面的timestamp\_format参数。
+
+ - TIME\_FORMAT
+
+ 导入对于TIME类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
+
+ 取值范围:合法TIME格式,不支持时区。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
+
+ - TIMESTAMP\_FORMAT
+
+ 导入对于TIMESTAMP类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
+
+ 取值范围:合法TIMESTAMP格式,不支持时区。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
+
+ - SMALLDATETIME\_FORMAT
+
+ 导入对于SMALLDATETIME类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
+
+ 取值范围:合法SMALLDATETIME格式。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
+
+
+- **COPY\_OPTION \{ option\_name ' value ' \}**
+
+ 用于指定COPY原生的各类参数。
+
+ - NULL null\_string
+
+ 用来指定数据文件中空值的表示。
+
+ > **须知:**
+ >
+ >在使用COPY FROM的时候,任何匹配这个字符串的字符串将被存储为NULL值,所以应该确保指定的字符串和COPY TO相同。
+
+ 取值范围:
+
+ - null值不能是\\r和\\n,最大为100个字符。
+ - null值不能和分隔符、quote参数相同。
+
+ 缺省值:
+
+ - 在TEXT格式下默认值是\\N。
+ - CSV格式下默认值是一个没有引号的空字符串。
+
+ - HEADER
+
+ 指定导出数据文件是否包含标题行,标题行一般用来描述表中每个字段的信息。header只能用于CSV、FIXED格式的文件中。
+
+ 在导入数据时,如果header选项为on,则数据文本第一行会被识别为标题行,会忽略此行。如果header为off,而数据文件中第一行会被识别为数据。
+
+ 在导出数据时,如果header选项为on,则需要指定fileheader。如果header为off,则导出数据文件不包含标题行。
+
+ - FILEHEADER
+
+ 导出数据时用于定义标题行的文件,一般用来描述每一列的数据信息。
+
+ > **须知:**
+ >
+ >- 仅在header为on或true的情况下有效。
+ >
+ >- fileheader指定的是绝对路径。
+ >
+ >- 该文件只能包含一行标题信息,并以换行符结尾,多余的行将被丢弃(标题信息不能包含换行符)。
+ >
+ >- 该文件包括换行符在内长度不超过1M。
+
+ - FREEZE
+
+ 将COPY加载的数据行设置为已经被frozen,就像这些数据行执行过VACUUM FREEZE。
+
+ 这是一个初始数据加载的性能选项。仅当以下三个条件同时满足时,数据行会被frozen:
+
+ - 在同一事务中create或truncate这张表之后执行COPY。
+ - 当前事务中没有打开的游标。
+ - 当前事务中没有原有的快照。
+
+ > **说明:**
+ >
+ >COPY完成后,所有其他会话将会立刻看到这些数据。但是这违反了MVCC可见性的一般原则,用户应当了解这样会导致潜在的风险。
+
+ - FORCE NOT NULL column\_name \[, ...\]
+
+ 在CSV COPY FROM模式下,指定的字段不为空。若输入为空,则将视为长度为0的字符串。
+
+ 取值范围:已存在的字段。
+
+ - FORCE NULL column\_name \[, ...\]
+
+ 在CSV COPY FROM模式下,将指定的字段表示空值的字符串设置为NULL,包括加了引号的空值字符串。
+
+ 取值范围:已存在的字段。
+
+ - FORCE QUOTE \{ column\_name \[, ...\] | \* \}
+
+ 在CSV COPY TO模式下,强制在每个声明的字段周围对所有非NULL值都使用引号包围。NULL输出不会被引号包围。
+
+ 取值范围:已存在的字段。
+
+ - BINARY
+
+ 使用二进制格式存储和读取,而不是以文本的方式。在二进制模式下,不能声明DELIMITER、NULL、CSV选项。指定BINARY类型后,不能再通过option或copy\_option指定CSV、FIXED、TEXT等类型。
+
+ - CSV
+
+ 打开逗号分隔变量(CSV)模式。指定CSV类型后,不能再通过option或copy\_option指定BINARY、FIXED、TEXT等类型。
+
+ - QUOTE \[AS\] 'quote\_character'
+
+ CSV格式文件下的引号字符。
+
+ 缺省值:双引号。
+
+ > **说明:**
+ >
+ >- quote参数不能和分隔符、null参数相同。
+ >- quote参数只能是单字节的字符。
+ >- 推荐不可见字符作为quote,例如0x07、0x08、0x1b等。
+
+ - ESCAPE \[AS\] 'escape\_character'
+
+ CSV格式下,用来指定逃逸字符,逃逸字符只能指定为单字节字符。
+
+ 默认值为双引号。当与quote值相同时,会被替换为'\\0'。
+
+ - EOL 'newline\_character'
+
+ 指定导入导出数据文件换行符样式。
+
+ 取值范围:支持多字符换行符,但换行符不能超过10个字节。常见的换行符,如\\r、\\n、\\r\\n(设成0x0D、0x0A、0x0D0A效果是相同的),其他字符或字符串,如$、\#。
+
+ > **说明:**
+ >
+ >- EOL参数只能用于TEXT格式的导入导出,不支持CSV格式和FIXED格式。为了兼容原有EOL参数,仍然支持导出CSV格式和FIXED格式时指定EOL参数为0x0D或0x0D0A。
+ >- EOL参数不能和分隔符、null参数相同。
+ >- EOL参数不能包含:.abcdefghijklmnopqrstuvwxyz0123456789。
+
+ - ENCODING 'encoding\_name'
+
+ 指定文件编码格式名称。
+
+ 取值范围:有效的编码格式。
+
+ 缺省值:当前编码格式。
+
+ - IGNORE\_EXTRA\_DATA
+
+ 指定当数据源文件比外表定义列数多时,忽略行尾多出来的列。该参数只在数据导入过程中使用。
+
+ 若不使用该参数,在数据源文件比外表定义列数多,会显示如下错误信息。
+
+ ```
+ extra data after last expected column
+ ```
+
+ - COMPATIBLE\_ILLEGAL\_CHARS
+
+ 指定导入时对非法字符进行容错处理,非法字符转换后入库。不报错,不中断导入。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
+
+ 若不使用该参数,导入时遇到非法字符进行报错,中断导入。
+
+ > **说明:**
+ >
+ >导入非法字符容错规则如下:
+ >(1)对于'\\0',容错后转换为空格;
+ >(2)对于其他非法字符,容错后转换为问号;
+ >(3)若compatible\_illegal\_chars为true/on标识,导入时对于非法字符进行容错处理,则若NULL、DELIMITER、QUOTE、ESCAPE设置为空格或问号则会通过如“illegal chars conversion may confuse COPY escape 0x20”等报错信息提示用户修改可能引起混淆的参数以避免导入错误。
+
+ - FILL\_MISSING\_FIELDS
+
+ 当数据加载时,若数据源文件中一行的最后一个字段缺失的处理方式。
+
+ 取值范围:true/on、false/off。
+
+ 缺省值:false/off。
+
+ > **须知:**
+ >
+ >目前COPY指定此Option实际不会生效,即不会有相应的容错处理效果(不生效)。需要额外注意的是,打开此选项会导致解析器在数据库主节点数据解析阶段(即COPY错误表容错的涵盖范围)忽略此数据问题,而到数据库节点重新报错,从而使得COPY错误表(打开LOG ERRORS REJECT LIMIT)在此选项打开的情况下无法成功捕获这类少列的数据异常。因此请不要指定此选项。
+
+ - DATE\_FORMAT 'date\_format\_string'
+
+ 导入对于DATE类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
+
+ 取值范围:合法DATE格式。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)
+
+ > **说明:**
+ >
+ >对于DATE类型内建为TIMESTAMP类型的数据库,在导入的时候,若需指定格式,可以参考下面的timestamp\_format参数。
+
+ - TIME\_FORMAT 'time\_format\_string'
+
+ 导入对于TIME类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
+
+ 取值范围:合法TIME格式,不支持时区。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
+
+ - TIMESTAMP\_FORMAT 'timestamp\_format\_string'
+
+ 导入对于TIMESTAMP类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
+
+ 取值范围:合法TIMESTAMP格式,不支持时区。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
+
+ - SMALLDATETIME\_FORMAT 'smalldatetime\_format\_string'
+
+ 导入对于SMALLDATETIME类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
+
+ 取值范围:合法SMALLDATETIME格式。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
+
+ - TRANSFORM \( \{ column\_name \[ data\_type \] \[ AS transform\_expr \] \} \[, ...\] \)
+
+ 指定表中各个列的转换表达式;其中data\_type指定该列在表达式参数中的数据类型;transform\_expr为目标表达式,返回与表中目标列数据类型一致的结果值,表达式可参考[表达式](表达式.md)。
+
+ COPY FROM能够识别的特殊反斜杠序列如下所示。
+
+ - **\\b**:反斜杠 (ASCII 8)
+ - **\\f**:换页(ASCII 12)
+ - **\\n**:换行符 (ASCII 10)
+ - **\\r**:回车符 (ASCII 13)
+ - **\\t**:水平制表符 (ASCII 9)
+ - **\\v**:垂直制表符 (ASCII 11)
+ - **\\digits**:反斜杠后面跟着一到三个八进制数,表示ASCII值为该数的字符。
+ - **\\xdigits**:反斜杠x后面跟着一个或两个十六进制位声明指定数值编码的字符。
+
+
+## 示例
+
+```
+--将tpcds.ship_mode中的数据拷贝到/home/omm/ds_ship_mode.dat文件中。
+openGauss=# COPY tpcds.ship_mode TO '/home/omm/ds_ship_mode.dat';
+
+--将tpcds.ship_mode 输出到stdout。
+openGauss=# COPY tpcds.ship_mode TO stdout;
+
+--创建tpcds.ship_mode_t1表。
+openGauss=# CREATE TABLE tpcds.ship_mode_t1
+(
+ SM_SHIP_MODE_SK INTEGER NOT NULL,
+ SM_SHIP_MODE_ID CHAR(16) NOT NULL,
+ SM_TYPE CHAR(30) ,
+ SM_CODE CHAR(10) ,
+ SM_CARRIER CHAR(20) ,
+ SM_CONTRACT CHAR(20)
+)
+WITH (ORIENTATION = COLUMN,COMPRESSION=MIDDLE)
+;
+
+--从stdin拷贝数据到表tpcds.ship_mode_t1。
+openGauss=# COPY tpcds.ship_mode_t1 FROM stdin;
+
+--从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1。
+openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat';
+
+--从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1,应用TRANSFORM表达式转换,取SM_TYPE列左边10个字符插入到表中。
+openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' TRANSFORM (SM_TYPE AS LEFT(SM_TYPE, 10));
+
+--从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1,使用参数如下:导入格式为TEXT(format 'text'),分隔符为'\t'(delimiter E'\t'),忽略多余列(ignore_extra_data 'true'),不指定转义(noescaping 'true')。
+openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' WITH(format 'text', delimiter E'\t', ignore_extra_data 'true', noescaping 'true');
+
+--从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1,使用参数如下:导入格式为FIXED(FIXED),指定定长格式(FORMATTER(SM_SHIP_MODE_SK(0, 2), SM_SHIP_MODE_ID(2,16), SM_TYPE(18,30), SM_CODE(50,10), SM_CARRIER(61,20), SM_CONTRACT(82,20))),忽略多余列(ignore_extra_data),有数据头(header)。
+openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' FIXED FORMATTER(SM_SHIP_MODE_SK(0, 2), SM_SHIP_MODE_ID(2,16), SM_TYPE(18,30), SM_CODE(50,10), SM_CARRIER(61,20), SM_CONTRACT(82,20)) header ignore_extra_data;
+
+--删除tpcds.ship_mode_t1。
+openGauss=# DROP TABLE tpcds.ship_mode_t1;
+```
+
--
Gitee
From 6360d4bf8620547001f83b5743f76457a2b0acbe Mon Sep 17 00:00:00 2001
From: unknown <895543892@qq.com>
Date: Sat, 26 Nov 2022 10:55:05 +0800
Subject: [PATCH 2/4] copywanshan
---
content/zh/docs/Developerguide/COPY.md.bak | 659 ---------------------
1 file changed, 659 deletions(-)
delete mode 100644 content/zh/docs/Developerguide/COPY.md.bak
diff --git a/content/zh/docs/Developerguide/COPY.md.bak b/content/zh/docs/Developerguide/COPY.md.bak
deleted file mode 100644
index d3f0542ec..000000000
--- a/content/zh/docs/Developerguide/COPY.md.bak
+++ /dev/null
@@ -1,659 +0,0 @@
-# COPY
-
-## 功能描述
-
-通过COPY命令实现在表和文件之间拷贝数据。
-
-COPY FROM从一个文件拷贝数据到一个表,COPY TO把一个表的数据拷贝到一个文件。
-
-## 注意事项
-
-- 当参数enable\_copy\_server\_files关闭时,只允许初始用户执行COPY FROM FILENAME或COPY TO FILENAME命令,当参数enable\_copy\_server\_files打开,允许具有SYSADMIN权限的用户或继承了内置角色gs\_role\_copy\_files权限的用户执行,但默认禁止对数据库配置文件、密钥文件、证书文件和审计日志执行COPY FROM FILENAME或COPY TO FILENAME,以防止用户越权查看或修改敏感文件。
-- COPY只能用于表,不能用于视图。
-- COPY TO需要读取的表的select权限,copy from需要插入的表的insert权限。
-- 如果声明了一个字段列表,COPY将只在文件和表之间拷贝已声明字段的数据。如果表中有任何不在字段列表里的字段,COPY FROM将为那些字段插入缺省值。
-- 如果声明了数据源文件,服务器必须可以访问该文件;如果指定了STDIN,数据将在客户前端和服务器之间流动,输入时,表的列与列之间使用TAB键分隔,在新的一行中以反斜杠和句点(\\.)表示输入结束。
-- 如果数据文件的任意行包含比预期多或者少的字段,COPY FROM将抛出一个错误。
-- 数据的结束可以用一个只包含反斜杠和句点(\\.)的行表示。如果从文件中读取数据,数据结束的标记是不必要的;如果在客户端应用之间拷贝数据,必须要有结束标记。
-- COPY FROM中\\N为空字符串,如果要输入实际数据值\\N ,使用\\\\N。
-
-- COPY FROM不支持在导入过程中对数据做预处理(比如说表达式运算、填充指定默认值等)。如果需要在导入过程中对数据做预处理,用户需先把数据导入到临时表中,然后执行SQL语句通过运算插入到表中,但此方法会导致I/O膨胀,降低导入性能。
-- COPY FROM在遇到数据格式错误时会回滚事务,但没有足够的错误信息,不方便用户从大量的原始数据中定位错误数据。
-- COPY FROM/TO适合低并发,本地小数据量导入导出。
-- 目标表存在trigger,支持COPY操作。
-
-## 语法格式
-
-- 从一个文件拷贝数据到一个表。
-
- ```
- COPY table_name [ ( column_name [, ...] ) ]
- FROM { 'filename' | STDIN }
- [ [ USING ] DELIMITERS 'delimiters' ]
- [ WITHOUT ESCAPING ]
- [ LOG ERRORS ]
- [ LOG ERRORS DATA ]
- [ REJECT LIMIT 'limit' ]
- [ [ WITH ] ( option [, ...] ) ]
- | copy_option
- | [ FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) ]
- | [ TRANSFORM ( { column_name [ data_type ] [ AS transform_expr ] } [, ...] ) ];
- ```
-
- > **说明:**
- >语法中的FIXED FORMATTER \( \{ column\_name\( offset, length \) \} \[, ...\] \)以及 \[ \( option \[, ...\] \) | copy\_option \[ ...\] \] 可以任意排列组合。
-
-- 把一个表的数据拷贝到一个文件。
-
- ```
- COPY table_name [ ( column_name [, ...] ) ]
- TO { 'filename' | STDOUT }
- [ [ USING ] DELIMITERS 'delimiters' ]
- [ WITHOUT ESCAPING ]
- [ [ WITH ] ( option [, ...] ) ]
- | copy_option
- | [ FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) ];
-
- COPY query
- TO { 'filename' | STDOUT }
- [ WITHOUT ESCAPING ]
- [ [ WITH ] ( option [, ...] ) ]
- | copy_option
- | [ FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) ];
- ```
-
- > **说明:**
- >1. COPY TO语法形式约束如下:
- > \(query\)与\[USING\] DELIMITER不兼容,即若COPY TO的数据来自于一个query的查询结果,那么COPY TO语法不能再指定\[USING\] DELIMITERS语法子句。
- >2. 对于FIXED FORMATTTER语法后面跟随的copy\_option是以空格进行分隔的。
- >3. copy\_option是指COPY原生的参数形式,而option是兼容外表导入的参数形式。
- >4. 语法中的FIXED FORMATTER \( \{ column\_name\( offset, length \) \} \[, ...\] \)以及 \[ \( option \[, ...\] \) | copy\_option \[ ...\] \] 可以任意排列组合。
-
- 其中可选参数option子句语法为:
-
- ```
- FORMAT format_name
- | OIDS [ boolean ]
- | DELIMITER 'delimiter_character'
- | NULL 'null_string'
- | HEADER [ boolean ]
- | FILEHEADER 'header_file_string'
- | FREEZE [ boolean ]
- | QUOTE 'quote_character'
- | ESCAPE 'escape_character'
- | EOL 'newline_character'
- | NOESCAPING [ boolean ]
- | FORCE_QUOTE { ( column_name [, ...] ) | * }
- | FORCE_NOT_NULL ( column_name [, ...] )
- | ENCODING 'encoding_name'
- | IGNORE_EXTRA_DATA [ boolean ]
- | FILL_MISSING_FIELDS [ boolean ]
- | COMPATIBLE_ILLEGAL_CHARS [ boolean ]
- | DATE_FORMAT 'date_format_string'
- | TIME_FORMAT 'time_format_string'
- | TIMESTAMP_FORMAT 'timestamp_format_string'
- | SMALLDATETIME_FORMAT 'smalldatetime_format_string'
- ```
-
- 其中可选参数copy\_option子句语法为:
-
- ```
- OIDS
- | NULL 'null_string'
- | HEADER
- | FILEHEADER 'header_file_string'
- | FREEZE
- | FORCE NOT NULL column_name [, ...]
- | FORCE QUOTE { column_name [, ...] | * }
- | BINARY
- | CSV
- | QUOTE [ AS ] 'quote_character'
- | ESCAPE [ AS ] 'escape_character'
- | EOL 'newline_character'
- | ENCODING 'encoding_name'
- | IGNORE_EXTRA_DATA
- | FILL_MISSING_FIELDS
- | COMPATIBLE_ILLEGAL_CHARS
- | DATE_FORMAT 'date_format_string'
- | TIME_FORMAT 'time_format_string'
- | TIMESTAMP_FORMAT 'timestamp_format_string'
- | SMALLDATETIME_FORMAT 'smalldatetime_format_string'
- ```
-
-
-## 参数说明
-
-- **query**
-
- 其结果将被拷贝。
-
- 取值范围:一个必须用圆括弧包围的SELECT或VALUES命令。
-
-- **table\_name**
-
- 表的名称(可以有模式修饰)。
-
- 取值范围:已存在的表名。
-
-- **column\_name**
-
- 可选的待拷贝字段列表。
-
- 取值范围:如果没有声明字段列表,将使用所有字段。
-
-- **STDIN**
-
- 声明输入是来自标准输入。
-
-- **STDOUT**
-
- 声明输出打印到标准输出。
-
-- **FIXED**
-
- 打开字段固定长度模式。在字段固定长度模式下,不能声明DELIMITER、NULL、CSV选项。指定FIXED类型后,不能再通过option或copy\_option指定BINARY、CSV、TEXT等类型。
-
- > **说明:**
- >定长格式定义如下:
- >1. 每条记录的每个字段长度相同。
- >2. 长度不足的字段以空格填充,数字类型字段左对齐,字符字段右对齐。
- >3. 字段和字段之间没有分隔符。
-
-- **\[USING\] DELIMITER 'delimiters'**
-
- 在文件中分隔各个字段的字符串,分隔符最大长度不超过10个字节。
-
- 取值范围:不允许包含\\.abcdefghijklmnopqrstuvwxyz0123456789中的任何一个字符。
-
- 缺省值:在文本模式下,缺省是水平制表符,在CSV模式下是一个逗号。
-
-- **WITHOUT ESCAPING**
-
- 在TEXT格式中,不对'\\'和后面的字符进行转义。
-
- 取值范围:仅支持TEXT格式。
-
-- **LOG ERRORS**
-
- 若指定,则开启对于COPY FROM语句中数据类型错误的容错机制。
-
- 取值范围:仅支持导入(即COPY FROM)时指定。
-
- > **说明:**
- >
- >此容错选项的使用限制如下:
- >
- >- 此容错机制仅捕捉COPY FROM过程中数据库主节点上数据解析过程中相关的数据类型错误(DATA\_EXCEPTION)。
- >- COPY已有的容错选项(如IGNORE\_EXTRA\_DATA)开启时,对应类型的错误会按照已有的方式处理而不会报出异常,因此错误表也不会有相应数据。
-
-- **LOG ERRORS DATA**
-
- LOG ERRORS DATA和LOG ERRORS的区别:
-
- 1. LOG ERRORS DATA会填充容错表的rawrecord字段。
- 2. 只有supper权限的用户才能使用LOG ERRORS DATA参数选项。
-
- > **注意:**
- >使用**“LOG ERRORS DATA”**时,若错误内容过于复杂可能存在写入容错表失败的风险,导致任务失败。
-
-
-- **REJECT LIMIT** **'imit'**
-
- 与LOG ERROR选项共同使用,对COPY FROM的容错机制设置数值上限,一旦此COPY FROM语句错误数据超过选项指定条数,则会按照原有机制报错。
-
- 取值范围:正整数(1-INTMAX),'unlimited'(无最大值限制)
-
- 缺省值:若未指定LOG ERRORS,则会报错;若指定LOG ERRORS,则默认为0。
-
- > **说明:**
- >如上述LOG ERRORS中描述的容错机制,REJECT LIMIT的计数也是按照执行COPY FROM的数据库主节点上遇到的解析错误数量计算,而不是数据库节点的错误数量。
-
-- **FORMATTER**
-
- 在固定长度模式中,定义每一个字段在数据文件中的位置。按照column\(offset,length\)格式定义每一列在数据文件中的位置。
-
- 取值范围:
-
- - offset取值不能小于0,以字节为单位。
- - length取值不能小于0,以字节为单位。
-
- 所有列的总长度和不能大于1GB。
-
- 文件中没有出现的列默认以空值代替。
-
-- **OPTION \{ option\_name ' value ' \}**
-
- 用于指定兼容外表的各类参数。
-
- - FORMAT
-
- 数据源文件的格式。
-
- 取值范围:CSV、TEXT、FIXED、BINARY。
-
- - CSV格式的文件,可以有效处理数据列中的换行符,但对一些特殊字符处理有欠缺。
- - TEXT格式的文件,可以有效处理一些特殊字符,但无法正确处理数据列中的换行符。
- - FIXED格式的文件,适用于每条数据的数据列都比较固定的数据,长度不足的列会添加空格补齐,过长的列则会自动截断。
- - BINARY形式的选项会使得所有的数据被存储/读作二进制格式而不是文本。 这比TEXT和CSV格式的要快一些,但是一个BINARY格式文件可移植性比较差。
-
- 缺省值:TEXT
-
- - DELIMITER
-
- 指定数据文件行数据的字段分隔符。
-
- > **说明:**
- >
- >- 分隔符不能是\\r和\\n。
- >
- >- 分隔符不能和null参数相同,CSV格式数据的分隔符不能和quote参数相同。
- >
- >- TEXT格式数据的分隔符不能包含:小写字母、数字和特殊字符.\\。
- >
- >- 数据文件中单行数据长度需<1GB,如果分隔符较长且数据列较多的情况下,会影响导出有效数据的长度。
- >
- >- 分隔符推荐使用多字符和不可见字符。多字符例如'$^&';不可见字符例如0x07、0x08、0x1b等。
-
- 取值范围:支持多字符分隔符,但分隔符不能超过10个字节。
-
- 缺省值:
-
- - TEXT格式的默认分隔符是水平制表符(tab)。
- - CSV格式的默认分隔符为“,”。
- - FIXED格式没有分隔符。
-
- - NULL
-
- 用来指定数据文件中空值的表示。
-
- 取值范围:
-
- - null值不能是\\r和\\n,最大为100个字符。
- - null值不能和分隔符、quote参数相同。
-
- 缺省值:
-
- - CSV格式下默认值是一个没有引号的空字符串。
- - 在TEXT格式下默认值是\\N。
-
- - HEADER
-
- 指定导出数据文件是否包含标题行,标题行一般用来描述表中每个字段的信息。header只能用于CSV、FIXED格式的文件中。
-
- 在导入数据时,如果header选项为on,则数据文本第一行会被识别为标题行,会忽略此行。如果header为off,而数据文件中第一行会被识别为数据。
-
- 在导出数据时,如果header选项为on,则需要指定fileheader。如果header为off,则导出数据文件不包含标题行。
-
- 取值范围:true/on、false/off。
-
- 缺省值:false
-
- - QUOTE
-
- CSV格式文件下的引号字符。
-
- 缺省值:双引号
-
- > **说明:**
- >
- >- quote参数不能和分隔符、null参数相同。
- >- quote参数只能是单字节的字符。
- >- 推荐不可见字符作为quote,例如0x07、0x08、0x1b等。
-
- - ESCAPE
-
- CSV格式下,用来指定逃逸字符,逃逸字符只能指定为单字节字符。
-
- 缺省值:双引号。当与quote值相同时,会被替换为'\\0'。
-
- - EOL 'newline\_character'
-
- 指定导入导出数据文件换行符样式。
-
- 取值范围:支持多字符换行符,但换行符不能超过10个字节。常见的换行符,如\\r、\\n、\\r\\n(设成0x0D、0x0A、0x0D0A效果是相同的),其他字符或字符串,如$、\#。
-
- > **说明:**
- >
- >- EOL参数只能用于TEXT格式的导入导出,不支持CSV格式和FIXED格式导入。为了兼容原有EOL参数,仍然支持导出CSV格式和FIXED格式时指定EOL参数为0x0D或0x0D0A。
- >
- >- EOL参数不能和分隔符、null参数相同。
- >
- >- EOL参数不能包含:.abcdefghijklmnopqrstuvwxyz0123456789。
-
- - FORCE\_QUOTE \{ \( column\_name \[, ...\] \) | \* \}
-
- 在CSV COPY TO模式下,强制在每个声明的字段周围对所有非NULL值都使用引号包围。NULL输出不会被引号包围。
-
- 取值范围:已存在的字段。
-
- - FORCE\_NOT\_NULL \( column\_name \[, ...\] \)
-
- 此函数指定的列将不会把输入匹配(识别)为 null 字符串。null 值字符串将被默认为空字符串,即长度为零的字符串而不是 null,即使它们没有用引号引起来。
- 此选项仅允许在“COPY FROM”语句中,并且仅在指定为 CSV 格式时被允许使用。
-
-
- 取值范围:已存在的字段。
-
- - ENCODING
-
- 指定数据文件的编码格式名称,缺省为当前数据库编码格式。
-
- - IGNORE\_EXTRA\_DATA
-
- 若数据源文件比外表定义列数多,是否会忽略对多出的列。该参数只在数据导入过程中使用。
-
- 取值范围:true/on、false/off。
-
- - 参数为true/on,若数据源文件比外表定义列数多,则忽略行尾多出来的列。
- - 参数为false/off,若数据源文件比外表定义列数多,会显示如下错误信息。
-
- ```
- extra data after last expected column
- ```
-
- 缺省值:false。
-
- > **须知:**
- >
- >如果行尾换行符丢失,使两行变成一行时,设置此参数为true将导致后一行数据被忽略掉。
-
- - COMPATIBLE\_ILLEGAL\_CHARS
-
- 导入非法字符容错参数。此语法仅对COPY FROM导入有效。
-
- 取值范围:true/on、false/off。
-
- - 参数为true/on,则导入时遇到非法字符进行容错处理,非法字符转换后入库,不报错,不中断导入。
- - 参数为false/off,导入时遇到非法字符进行报错,中断导入。
-
- 缺省值:false/off
-
- > **说明:**
- >
- >导入非法字符容错规则如下:
- >
- >(1)对于'\\0',容错后转换为空格;
- >
- >(2)对于其他非法字符,容错后转换为问号;
- >
- >(3)若compatible\_illegal\_chars为true/on标识导入时对于非法字符进行容错处理,则若NULL、DELIMITER、QUOTE、ESCAPE设置为空格或问号则会通过如“illegal chars conversion may confuse COPY escape 0x20”等报错信息提示用户修改可能引起混淆的参数以避免导入错误。
-
- - FILL\_MISSING\_FIELDS
-
- 当数据加载时,若数据源文件中一行的最后一个字段缺失的处理方式。
-
- 取值范围:true/on、false/off。
-
- 缺省值:false/off
-
- - DATE\_FORMAT
-
- 导入对于DATE类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
-
- 取值范围:合法DATE格式。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
-
- > **说明:**
- >
- >对于DATE类型内建为TIMESTAMP类型的数据库,在导入的时候,若需指定格式,可以参考下面的timestamp\_format参数。
-
- - TIME\_FORMAT
-
- 导入对于TIME类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
-
- 取值范围:合法TIME格式,不支持时区。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
-
- - TIMESTAMP\_FORMAT
-
- 导入对于TIMESTAMP类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
-
- 取值范围:合法TIMESTAMP格式,不支持时区。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
-
- - SMALLDATETIME\_FORMAT
-
- 导入对于SMALLDATETIME类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
-
- 取值范围:合法SMALLDATETIME格式。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
-
-
-- **COPY\_OPTION \{ option\_name ' value ' \}**
-
- 用于指定COPY原生的各类参数。
-
- - NULL null\_string
-
- 用来指定数据文件中空值的表示。
-
- > **须知:**
- >
- >在使用COPY FROM的时候,任何匹配这个字符串的字符串将被存储为NULL值,所以应该确保指定的字符串和COPY TO相同。
-
- 取值范围:
-
- - null值不能是\\r和\\n,最大为100个字符。
- - null值不能和分隔符、quote参数相同。
-
- 缺省值:
-
- - 在TEXT格式下默认值是\\N。
- - CSV格式下默认值是一个没有引号的空字符串。
-
- - HEADER
-
- 指定导出数据文件是否包含标题行,标题行一般用来描述表中每个字段的信息。header只能用于CSV、FIXED格式的文件中。
-
- 在导入数据时,如果header选项为on,则数据文本第一行会被识别为标题行,会忽略此行。如果header为off,而数据文件中第一行会被识别为数据。
-
- 在导出数据时,如果header选项为on,则需要指定fileheader。如果header为off,则导出数据文件不包含标题行。
-
- - FILEHEADER
-
- 导出数据时用于定义标题行的文件,一般用来描述每一列的数据信息。
-
- > **须知:**
- >
- >- 仅在header为on或true的情况下有效。
- >
- >- fileheader指定的是绝对路径。
- >
- >- 该文件只能包含一行标题信息,并以换行符结尾,多余的行将被丢弃(标题信息不能包含换行符)。
- >
- >- 该文件包括换行符在内长度不超过1M。
-
- - FREEZE
-
- 将COPY加载的数据行设置为已经被frozen,就像这些数据行执行过VACUUM FREEZE。
-
- 这是一个初始数据加载的性能选项。仅当以下三个条件同时满足时,数据行会被frozen:
-
- - 在同一事务中create或truncate这张表之后执行COPY。
- - 当前事务中没有打开的游标。
- - 当前事务中没有原有的快照。
-
- > **说明:**
- >
- >COPY完成后,所有其他会话将会立刻看到这些数据。但是这违反了MVCC可见性的一般原则,用户应当了解这样会导致潜在的风险。
-
- - FORCE NOT NULL column\_name \[, ...\]
-
- 在CSV COPY FROM模式下,指定的字段不为空。若输入为空,则将视为长度为0的字符串。
-
- 取值范围:已存在的字段。
-
- - FORCE NULL column\_name \[, ...\]
-
- 在CSV COPY FROM模式下,将指定的字段表示空值的字符串设置为NULL,包括加了引号的空值字符串。
-
- 取值范围:已存在的字段。
-
- - FORCE QUOTE \{ column\_name \[, ...\] | \* \}
-
- 在CSV COPY TO模式下,强制在每个声明的字段周围对所有非NULL值都使用引号包围。NULL输出不会被引号包围。
-
- 取值范围:已存在的字段。
-
- - BINARY
-
- 使用二进制格式存储和读取,而不是以文本的方式。在二进制模式下,不能声明DELIMITER、NULL、CSV选项。指定BINARY类型后,不能再通过option或copy\_option指定CSV、FIXED、TEXT等类型。
-
- - CSV
-
- 打开逗号分隔变量(CSV)模式。指定CSV类型后,不能再通过option或copy\_option指定BINARY、FIXED、TEXT等类型。
-
- - QUOTE \[AS\] 'quote\_character'
-
- CSV格式文件下的引号字符。
-
- 缺省值:双引号。
-
- > **说明:**
- >
- >- quote参数不能和分隔符、null参数相同。
- >- quote参数只能是单字节的字符。
- >- 推荐不可见字符作为quote,例如0x07、0x08、0x1b等。
-
- - ESCAPE \[AS\] 'escape\_character'
-
- CSV格式下,用来指定逃逸字符,逃逸字符只能指定为单字节字符。
-
- 默认值为双引号。当与quote值相同时,会被替换为'\\0'。
-
- - EOL 'newline\_character'
-
- 指定导入导出数据文件换行符样式。
-
- 取值范围:支持多字符换行符,但换行符不能超过10个字节。常见的换行符,如\\r、\\n、\\r\\n(设成0x0D、0x0A、0x0D0A效果是相同的),其他字符或字符串,如$、\#。
-
- > **说明:**
- >
- >- EOL参数只能用于TEXT格式的导入导出,不支持CSV格式和FIXED格式。为了兼容原有EOL参数,仍然支持导出CSV格式和FIXED格式时指定EOL参数为0x0D或0x0D0A。
- >- EOL参数不能和分隔符、null参数相同。
- >- EOL参数不能包含:.abcdefghijklmnopqrstuvwxyz0123456789。
-
- - ENCODING 'encoding\_name'
-
- 指定文件编码格式名称。
-
- 取值范围:有效的编码格式。
-
- 缺省值:当前编码格式。
-
- - IGNORE\_EXTRA\_DATA
-
- 指定当数据源文件比外表定义列数多时,忽略行尾多出来的列。该参数只在数据导入过程中使用。
-
- 若不使用该参数,在数据源文件比外表定义列数多,会显示如下错误信息。
-
- ```
- extra data after last expected column
- ```
-
- - COMPATIBLE\_ILLEGAL\_CHARS
-
- 指定导入时对非法字符进行容错处理,非法字符转换后入库。不报错,不中断导入。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
-
- 若不使用该参数,导入时遇到非法字符进行报错,中断导入。
-
- > **说明:**
- >
- >导入非法字符容错规则如下:
- >(1)对于'\\0',容错后转换为空格;
- >(2)对于其他非法字符,容错后转换为问号;
- >(3)若compatible\_illegal\_chars为true/on标识,导入时对于非法字符进行容错处理,则若NULL、DELIMITER、QUOTE、ESCAPE设置为空格或问号则会通过如“illegal chars conversion may confuse COPY escape 0x20”等报错信息提示用户修改可能引起混淆的参数以避免导入错误。
-
- - FILL\_MISSING\_FIELDS
-
- 当数据加载时,若数据源文件中一行的最后一个字段缺失的处理方式。
-
- 取值范围:true/on、false/off。
-
- 缺省值:false/off。
-
- > **须知:**
- >
- >目前COPY指定此Option实际不会生效,即不会有相应的容错处理效果(不生效)。需要额外注意的是,打开此选项会导致解析器在数据库主节点数据解析阶段(即COPY错误表容错的涵盖范围)忽略此数据问题,而到数据库节点重新报错,从而使得COPY错误表(打开LOG ERRORS REJECT LIMIT)在此选项打开的情况下无法成功捕获这类少列的数据异常。因此请不要指定此选项。
-
- - DATE\_FORMAT 'date\_format\_string'
-
- 导入对于DATE类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
-
- 取值范围:合法DATE格式。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)
-
- > **说明:**
- >
- >对于DATE类型内建为TIMESTAMP类型的数据库,在导入的时候,若需指定格式,可以参考下面的timestamp\_format参数。
-
- - TIME\_FORMAT 'time\_format\_string'
-
- 导入对于TIME类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
-
- 取值范围:合法TIME格式,不支持时区。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
-
- - TIMESTAMP\_FORMAT 'timestamp\_format\_string'
-
- 导入对于TIMESTAMP类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
-
- 取值范围:合法TIMESTAMP格式,不支持时区。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
-
- - SMALLDATETIME\_FORMAT 'smalldatetime\_format\_string'
-
- 导入对于SMALLDATETIME类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
-
- 取值范围:合法SMALLDATETIME格式。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
-
- - TRANSFORM \( \{ column\_name \[ data\_type \] \[ AS transform\_expr \] \} \[, ...\] \)
-
- 指定表中各个列的转换表达式;其中data\_type指定该列在表达式参数中的数据类型;transform\_expr为目标表达式,返回与表中目标列数据类型一致的结果值,表达式可参考[表达式](表达式.md)。
-
- COPY FROM能够识别的特殊反斜杠序列如下所示。
-
- - **\\b**:反斜杠 (ASCII 8)
- - **\\f**:换页(ASCII 12)
- - **\\n**:换行符 (ASCII 10)
- - **\\r**:回车符 (ASCII 13)
- - **\\t**:水平制表符 (ASCII 9)
- - **\\v**:垂直制表符 (ASCII 11)
- - **\\digits**:反斜杠后面跟着一到三个八进制数,表示ASCII值为该数的字符。
- - **\\xdigits**:反斜杠x后面跟着一个或两个十六进制位声明指定数值编码的字符。
-
-
-## 示例
-
-```
---将tpcds.ship_mode中的数据拷贝到/home/omm/ds_ship_mode.dat文件中。
-openGauss=# COPY tpcds.ship_mode TO '/home/omm/ds_ship_mode.dat';
-
---将tpcds.ship_mode 输出到stdout。
-openGauss=# COPY tpcds.ship_mode TO stdout;
-
---创建tpcds.ship_mode_t1表。
-openGauss=# CREATE TABLE tpcds.ship_mode_t1
-(
- SM_SHIP_MODE_SK INTEGER NOT NULL,
- SM_SHIP_MODE_ID CHAR(16) NOT NULL,
- SM_TYPE CHAR(30) ,
- SM_CODE CHAR(10) ,
- SM_CARRIER CHAR(20) ,
- SM_CONTRACT CHAR(20)
-)
-WITH (ORIENTATION = COLUMN,COMPRESSION=MIDDLE)
-;
-
---从stdin拷贝数据到表tpcds.ship_mode_t1。
-openGauss=# COPY tpcds.ship_mode_t1 FROM stdin;
-
---从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1。
-openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat';
-
---从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1,应用TRANSFORM表达式转换,取SM_TYPE列左边10个字符插入到表中。
-openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' TRANSFORM (SM_TYPE AS LEFT(SM_TYPE, 10));
-
---从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1,使用参数如下:导入格式为TEXT(format 'text'),分隔符为'\t'(delimiter E'\t'),忽略多余列(ignore_extra_data 'true'),不指定转义(noescaping 'true')。
-openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' WITH(format 'text', delimiter E'\t', ignore_extra_data 'true', noescaping 'true');
-
---从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1,使用参数如下:导入格式为FIXED(FIXED),指定定长格式(FORMATTER(SM_SHIP_MODE_SK(0, 2), SM_SHIP_MODE_ID(2,16), SM_TYPE(18,30), SM_CODE(50,10), SM_CARRIER(61,20), SM_CONTRACT(82,20))),忽略多余列(ignore_extra_data),有数据头(header)。
-openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' FIXED FORMATTER(SM_SHIP_MODE_SK(0, 2), SM_SHIP_MODE_ID(2,16), SM_TYPE(18,30), SM_CODE(50,10), SM_CARRIER(61,20), SM_CONTRACT(82,20)) header ignore_extra_data;
-
---删除tpcds.ship_mode_t1。
-openGauss=# DROP TABLE tpcds.ship_mode_t1;
-```
-
--
Gitee
From 0888132f4b08e0828e42e7d555f4c1c8d547fd87 Mon Sep 17 00:00:00 2001
From: unknown <895543892@qq.com>
Date: Sat, 26 Nov 2022 11:19:05 +0800
Subject: [PATCH 3/4] =?UTF-8?q?copy=E8=AF=AD=E6=B3=95=E5=AE=8C=E5=96=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
content/zh/docs/Developerguide/COPY.md | 3 +-
content/zh/docs/Developerguide/COPY.md.bak | 660 +++++++++++++++++++++
2 files changed, 662 insertions(+), 1 deletion(-)
create mode 100644 content/zh/docs/Developerguide/COPY.md.bak
diff --git a/content/zh/docs/Developerguide/COPY.md b/content/zh/docs/Developerguide/COPY.md
index 07c778c17..bd58680b3 100644
--- a/content/zh/docs/Developerguide/COPY.md
+++ b/content/zh/docs/Developerguide/COPY.md
@@ -299,7 +299,7 @@ COPY FROM从一个文件拷贝数据到一个表,COPY TO把一个表的数据
>- quote参数不能和分隔符、null参数相同。
>- quote参数只能是单字节的字符。
>- 推荐不可见字符作为quote,例如0x07、0x08、0x1b等。
- >- 例如quote e'\x22' :使用ASCII编码为16进制22的字符。
+ 例如quote e'\x22' :使用ASCII编码为16进制22的字符。
- ESCAPE
@@ -511,6 +511,7 @@ COPY FROM从一个文件拷贝数据到一个表,COPY TO把一个表的数据
>- quote参数不能和分隔符、null参数相同。
>- quote参数只能是单字节的字符。
>- 推荐不可见字符作为quote,例如0x07、0x08、0x1b等。
+ 例如quote e'\x22' :使用ASCII编码为16进制22的字符。
- ESCAPE \[AS\] 'escape\_character'
diff --git a/content/zh/docs/Developerguide/COPY.md.bak b/content/zh/docs/Developerguide/COPY.md.bak
new file mode 100644
index 000000000..07c778c17
--- /dev/null
+++ b/content/zh/docs/Developerguide/COPY.md.bak
@@ -0,0 +1,660 @@
+# COPY
+
+## 功能描述
+
+通过COPY命令实现在表和文件之间拷贝数据。
+
+COPY FROM从一个文件拷贝数据到一个表,COPY TO把一个表的数据拷贝到一个文件。
+
+## 注意事项
+
+- 当参数enable\_copy\_server\_files关闭时,只允许初始用户执行COPY FROM FILENAME或COPY TO FILENAME命令,当参数enable\_copy\_server\_files打开,允许具有SYSADMIN权限的用户或继承了内置角色gs\_role\_copy\_files权限的用户执行,但默认禁止对数据库配置文件、密钥文件、证书文件和审计日志执行COPY FROM FILENAME或COPY TO FILENAME,以防止用户越权查看或修改敏感文件。
+- COPY只能用于表,不能用于视图。
+- COPY TO需要读取的表的select权限,copy from需要插入的表的insert权限。
+- 如果声明了一个字段列表,COPY将只在文件和表之间拷贝已声明字段的数据。如果表中有任何不在字段列表里的字段,COPY FROM将为那些字段插入缺省值。
+- 如果声明了数据源文件,服务器必须可以访问该文件;如果指定了STDIN,数据将在客户前端和服务器之间流动,输入时,表的列与列之间使用TAB键分隔,在新的一行中以反斜杠和句点(\\.)表示输入结束。
+- 如果数据文件的任意行包含比预期多或者少的字段,COPY FROM将抛出一个错误。
+- 数据的结束可以用一个只包含反斜杠和句点(\\.)的行表示。如果从文件中读取数据,数据结束的标记是不必要的;如果在客户端应用之间拷贝数据,必须要有结束标记。
+- COPY FROM中\\N为空字符串,如果要输入实际数据值\\N ,使用\\\\N。
+
+- COPY FROM不支持在导入过程中对数据做预处理(比如说表达式运算、填充指定默认值等)。如果需要在导入过程中对数据做预处理,用户需先把数据导入到临时表中,然后执行SQL语句通过运算插入到表中,但此方法会导致I/O膨胀,降低导入性能。
+- COPY FROM在遇到数据格式错误时会回滚事务,但没有足够的错误信息,不方便用户从大量的原始数据中定位错误数据。
+- COPY FROM/TO适合低并发,本地小数据量导入导出。
+- 目标表存在trigger,支持COPY操作。
+
+## 语法格式
+
+- 从一个文件拷贝数据到一个表。
+
+ ```
+ COPY table_name [ ( column_name [, ...] ) ]
+ FROM { 'filename' | STDIN }
+ [ [ USING ] DELIMITERS 'delimiters' ]
+ [ WITHOUT ESCAPING ]
+ [ LOG ERRORS ]
+ [ LOG ERRORS DATA ]
+ [ REJECT LIMIT 'limit' ]
+ [ [ WITH ] ( option [, ...] ) ]
+ | copy_option
+ | [ FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) ]
+ | [ TRANSFORM ( { column_name [ data_type ] [ AS transform_expr ] } [, ...] ) ];
+ ```
+
+ > **说明:**
+ >语法中的FIXED FORMATTER \( \{ column\_name\( offset, length \) \} \[, ...\] \)以及 \[ \( option \[, ...\] \) | copy\_option \[ ...\] \] 可以任意排列组合。
+
+- 把一个表的数据拷贝到一个文件。
+
+ ```
+ COPY table_name [ ( column_name [, ...] ) ]
+ TO { 'filename' | STDOUT }
+ [ [ USING ] DELIMITERS 'delimiters' ]
+ [ WITHOUT ESCAPING ]
+ [ [ WITH ] ( option [, ...] ) ]
+ | copy_option
+ | [ FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) ];
+
+ COPY query
+ TO { 'filename' | STDOUT }
+ [ WITHOUT ESCAPING ]
+ [ [ WITH ] ( option [, ...] ) ]
+ | copy_option
+ | [ FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) ];
+ ```
+
+ > **说明:**
+ >1. COPY TO语法形式约束如下:
+ > \(query\)与\[USING\] DELIMITER不兼容,即若COPY TO的数据来自于一个query的查询结果,那么COPY TO语法不能再指定\[USING\] DELIMITERS语法子句。
+ >2. 对于FIXED FORMATTTER语法后面跟随的copy\_option是以空格进行分隔的。
+ >3. copy\_option是指COPY原生的参数形式,而option是兼容外表导入的参数形式。
+ >4. 语法中的FIXED FORMATTER \( \{ column\_name\( offset, length \) \} \[, ...\] \)以及 \[ \( option \[, ...\] \) | copy\_option \[ ...\] \] 可以任意排列组合。
+
+ 其中可选参数option子句语法为:
+
+ ```
+ FORMAT format_name
+ | OIDS [ boolean ]
+ | DELIMITER 'delimiter_character'
+ | NULL 'null_string'
+ | HEADER [ boolean ]
+ | FILEHEADER 'header_file_string'
+ | FREEZE [ boolean ]
+ | QUOTE 'quote_character'
+ | ESCAPE 'escape_character'
+ | EOL 'newline_character'
+ | NOESCAPING [ boolean ]
+ | FORCE_QUOTE { ( column_name [, ...] ) | * }
+ | FORCE_NOT_NULL ( column_name [, ...] )
+ | ENCODING 'encoding_name'
+ | IGNORE_EXTRA_DATA [ boolean ]
+ | FILL_MISSING_FIELDS [ boolean ]
+ | COMPATIBLE_ILLEGAL_CHARS [ boolean ]
+ | DATE_FORMAT 'date_format_string'
+ | TIME_FORMAT 'time_format_string'
+ | TIMESTAMP_FORMAT 'timestamp_format_string'
+ | SMALLDATETIME_FORMAT 'smalldatetime_format_string'
+ ```
+
+ 其中可选参数copy\_option子句语法为:
+
+ ```
+ OIDS
+ | NULL 'null_string'
+ | HEADER
+ | FILEHEADER 'header_file_string'
+ | FREEZE
+ | FORCE NOT NULL column_name [, ...]
+ | FORCE QUOTE { column_name [, ...] | * }
+ | BINARY
+ | CSV
+ | QUOTE [ AS ] 'quote_character'
+ | ESCAPE [ AS ] 'escape_character'
+ | EOL 'newline_character'
+ | ENCODING 'encoding_name'
+ | IGNORE_EXTRA_DATA
+ | FILL_MISSING_FIELDS
+ | COMPATIBLE_ILLEGAL_CHARS
+ | DATE_FORMAT 'date_format_string'
+ | TIME_FORMAT 'time_format_string'
+ | TIMESTAMP_FORMAT 'timestamp_format_string'
+ | SMALLDATETIME_FORMAT 'smalldatetime_format_string'
+ ```
+
+
+## 参数说明
+
+- **query**
+
+ 其结果将被拷贝。
+
+ 取值范围:一个必须用圆括弧包围的SELECT或VALUES命令。
+
+- **table\_name**
+
+ 表的名称(可以有模式修饰)。
+
+ 取值范围:已存在的表名。
+
+- **column\_name**
+
+ 可选的待拷贝字段列表。
+
+ 取值范围:如果没有声明字段列表,将使用所有字段。
+
+- **STDIN**
+
+ 声明输入是来自标准输入。
+
+- **STDOUT**
+
+ 声明输出打印到标准输出。
+
+- **FIXED**
+
+ 打开字段固定长度模式。在字段固定长度模式下,不能声明DELIMITER、NULL、CSV选项。指定FIXED类型后,不能再通过option或copy\_option指定BINARY、CSV、TEXT等类型。
+
+ > **说明:**
+ >定长格式定义如下:
+ >1. 每条记录的每个字段长度相同。
+ >2. 长度不足的字段以空格填充,数字类型字段左对齐,字符字段右对齐。
+ >3. 字段和字段之间没有分隔符。
+
+- **\[USING\] DELIMITER 'delimiters'**
+
+ 在文件中分隔各个字段的字符串,分隔符最大长度不超过10个字节。
+
+ 取值范围:不允许包含\\.abcdefghijklmnopqrstuvwxyz0123456789中的任何一个字符。
+
+ 缺省值:在文本模式下,缺省是水平制表符,在CSV模式下是一个逗号。
+
+- **WITHOUT ESCAPING**
+
+ 在TEXT格式中,不对'\\'和后面的字符进行转义。
+
+ 取值范围:仅支持TEXT格式。
+
+- **LOG ERRORS**
+
+ 若指定,则开启对于COPY FROM语句中数据类型错误的容错机制。
+
+ 取值范围:仅支持导入(即COPY FROM)时指定。
+
+ > **说明:**
+ >
+ >此容错选项的使用限制如下:
+ >
+ >- 此容错机制仅捕捉COPY FROM过程中数据库主节点上数据解析过程中相关的数据类型错误(DATA\_EXCEPTION)。
+ >- COPY已有的容错选项(如IGNORE\_EXTRA\_DATA)开启时,对应类型的错误会按照已有的方式处理而不会报出异常,因此错误表也不会有相应数据。
+
+- **LOG ERRORS DATA**
+
+ LOG ERRORS DATA和LOG ERRORS的区别:
+
+ 1. LOG ERRORS DATA会填充容错表的rawrecord字段。
+ 2. 只有supper权限的用户才能使用LOG ERRORS DATA参数选项。
+
+ > **注意:**
+ >使用**“LOG ERRORS DATA”**时,若错误内容过于复杂可能存在写入容错表失败的风险,导致任务失败。
+
+
+- **REJECT LIMIT** **'imit'**
+
+ 与LOG ERROR选项共同使用,对COPY FROM的容错机制设置数值上限,一旦此COPY FROM语句错误数据超过选项指定条数,则会按照原有机制报错。
+
+ 取值范围:正整数(1-INTMAX),'unlimited'(无最大值限制)
+
+ 缺省值:若未指定LOG ERRORS,则会报错;若指定LOG ERRORS,则默认为0。
+
+ > **说明:**
+ >如上述LOG ERRORS中描述的容错机制,REJECT LIMIT的计数也是按照执行COPY FROM的数据库主节点上遇到的解析错误数量计算,而不是数据库节点的错误数量。
+
+- **FORMATTER**
+
+ 在固定长度模式中,定义每一个字段在数据文件中的位置。按照column\(offset,length\)格式定义每一列在数据文件中的位置。
+
+ 取值范围:
+
+ - offset取值不能小于0,以字节为单位。
+ - length取值不能小于0,以字节为单位。
+
+ 所有列的总长度和不能大于1GB。
+
+ 文件中没有出现的列默认以空值代替。
+
+- **OPTION \{ option\_name ' value ' \}**
+
+ 用于指定兼容外表的各类参数。
+
+ - FORMAT
+
+ 数据源文件的格式。
+
+ 取值范围:CSV、TEXT、FIXED、BINARY。
+
+ - CSV格式的文件,可以有效处理数据列中的换行符,但对一些特殊字符处理有欠缺。
+ - TEXT格式的文件,可以有效处理一些特殊字符,但无法正确处理数据列中的换行符。
+ - FIXED格式的文件,适用于每条数据的数据列都比较固定的数据,长度不足的列会添加空格补齐,过长的列则会自动截断。
+ - BINARY形式的选项会使得所有的数据被存储/读作二进制格式而不是文本。 这比TEXT和CSV格式的要快一些,但是一个BINARY格式文件可移植性比较差。
+
+ 缺省值:TEXT
+
+ - DELIMITER
+
+ 指定数据文件行数据的字段分隔符。
+
+ > **说明:**
+ >
+ >- 分隔符不能是\\r和\\n。
+ >
+ >- 分隔符不能和null参数相同,CSV格式数据的分隔符不能和quote参数相同。
+ >
+ >- TEXT格式数据的分隔符不能包含:小写字母、数字和特殊字符.\\。
+ >
+ >- 数据文件中单行数据长度需<1GB,如果分隔符较长且数据列较多的情况下,会影响导出有效数据的长度。
+ >
+ >- 分隔符推荐使用多字符和不可见字符。多字符例如'$^&';不可见字符例如0x07、0x08、0x1b等。
+
+ 取值范围:支持多字符分隔符,但分隔符不能超过10个字节。
+
+ 缺省值:
+
+ - TEXT格式的默认分隔符是水平制表符(tab)。
+ - CSV格式的默认分隔符为“,”。
+ - FIXED格式没有分隔符。
+
+ - NULL
+
+ 用来指定数据文件中空值的表示。
+
+ 取值范围:
+
+ - null值不能是\\r和\\n,最大为100个字符。
+ - null值不能和分隔符、quote参数相同。
+
+ 缺省值:
+
+ - CSV格式下默认值是一个没有引号的空字符串。
+ - 在TEXT格式下默认值是\\N。
+
+ - HEADER
+
+ 指定导出数据文件是否包含标题行,标题行一般用来描述表中每个字段的信息。header只能用于CSV、FIXED格式的文件中。
+
+ 在导入数据时,如果header选项为on,则数据文本第一行会被识别为标题行,会忽略此行。如果header为off,而数据文件中第一行会被识别为数据。
+
+ 在导出数据时,如果header选项为on,则需要指定fileheader。如果header为off,则导出数据文件不包含标题行。
+
+ 取值范围:true/on、false/off。
+
+ 缺省值:false
+
+ - QUOTE
+
+ CSV格式文件下的引号字符。
+
+ 缺省值:双引号
+
+ > **说明:**
+ >
+ >- quote参数不能和分隔符、null参数相同。
+ >- quote参数只能是单字节的字符。
+ >- 推荐不可见字符作为quote,例如0x07、0x08、0x1b等。
+ >- 例如quote e'\x22' :使用ASCII编码为16进制22的字符。
+
+ - ESCAPE
+
+ CSV格式下,用来指定逃逸字符,逃逸字符只能指定为单字节字符。
+
+ 缺省值:双引号。当与quote值相同时,会被替换为'\\0'。
+
+ - EOL 'newline\_character'
+
+ 指定导入导出数据文件换行符样式。
+
+ 取值范围:支持多字符换行符,但换行符不能超过10个字节。常见的换行符,如\\r、\\n、\\r\\n(设成0x0D、0x0A、0x0D0A效果是相同的),其他字符或字符串,如$、\#。
+
+ > **说明:**
+ >
+ >- EOL参数只能用于TEXT格式的导入导出,不支持CSV格式和FIXED格式导入。为了兼容原有EOL参数,仍然支持导出CSV格式和FIXED格式时指定EOL参数为0x0D或0x0D0A。
+ >
+ >- EOL参数不能和分隔符、null参数相同。
+ >
+ >- EOL参数不能包含:.abcdefghijklmnopqrstuvwxyz0123456789。
+
+ - FORCE\_QUOTE \{ \( column\_name \[, ...\] \) | \* \}
+
+ 在CSV COPY TO模式下,强制在每个声明的字段周围对所有非NULL值都使用引号包围。NULL输出不会被引号包围。
+
+ 取值范围:已存在的字段。
+
+ - FORCE\_NOT\_NULL \( column\_name \[, ...\] \)
+
+ 此函数指定的列将不会把输入匹配(识别)为 null 字符串。null 值字符串将被默认为空字符串,即长度为零的字符串而不是 null,即使它们没有用引号引起来。
+ 此选项仅允许在“COPY FROM”语句中,并且仅在指定为 CSV 格式时被允许使用。
+
+
+ 取值范围:已存在的字段。
+
+ - ENCODING
+
+ 指定数据文件的编码格式名称,缺省为当前数据库编码格式。
+
+ - IGNORE\_EXTRA\_DATA
+
+ 若数据源文件比外表定义列数多,是否会忽略对多出的列。该参数只在数据导入过程中使用。
+
+ 取值范围:true/on、false/off。
+
+ - 参数为true/on,若数据源文件比外表定义列数多,则忽略行尾多出来的列。
+ - 参数为false/off,若数据源文件比外表定义列数多,会显示如下错误信息。
+
+ ```
+ extra data after last expected column
+ ```
+
+ 缺省值:false。
+
+ > **须知:**
+ >
+ >如果行尾换行符丢失,使两行变成一行时,设置此参数为true将导致后一行数据被忽略掉。
+
+ - COMPATIBLE\_ILLEGAL\_CHARS
+
+ 导入非法字符容错参数。此语法仅对COPY FROM导入有效。
+
+ 取值范围:true/on、false/off。
+
+ - 参数为true/on,则导入时遇到非法字符进行容错处理,非法字符转换后入库,不报错,不中断导入。
+ - 参数为false/off,导入时遇到非法字符进行报错,中断导入。
+
+ 缺省值:false/off
+
+ > **说明:**
+ >
+ >导入非法字符容错规则如下:
+ >
+ >(1)对于'\\0',容错后转换为空格;
+ >
+ >(2)对于其他非法字符,容错后转换为问号;
+ >
+ >(3)若compatible\_illegal\_chars为true/on标识导入时对于非法字符进行容错处理,则若NULL、DELIMITER、QUOTE、ESCAPE设置为空格或问号则会通过如“illegal chars conversion may confuse COPY escape 0x20”等报错信息提示用户修改可能引起混淆的参数以避免导入错误。
+
+ - FILL\_MISSING\_FIELDS
+
+ 当数据加载时,若数据源文件中一行的最后一个字段缺失的处理方式。
+
+ 取值范围:true/on、false/off。
+
+ 缺省值:false/off
+
+ - DATE\_FORMAT
+
+ 导入对于DATE类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
+
+ 取值范围:合法DATE格式。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
+
+ > **说明:**
+ >
+ >对于DATE类型内建为TIMESTAMP类型的数据库,在导入的时候,若需指定格式,可以参考下面的timestamp\_format参数。
+
+ - TIME\_FORMAT
+
+ 导入对于TIME类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
+
+ 取值范围:合法TIME格式,不支持时区。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
+
+ - TIMESTAMP\_FORMAT
+
+ 导入对于TIMESTAMP类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
+
+ 取值范围:合法TIMESTAMP格式,不支持时区。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
+
+ - SMALLDATETIME\_FORMAT
+
+ 导入对于SMALLDATETIME类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
+
+ 取值范围:合法SMALLDATETIME格式。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
+
+
+- **COPY\_OPTION \{ option\_name ' value ' \}**
+
+ 用于指定COPY原生的各类参数。
+
+ - NULL null\_string
+
+ 用来指定数据文件中空值的表示。
+
+ > **须知:**
+ >
+ >在使用COPY FROM的时候,任何匹配这个字符串的字符串将被存储为NULL值,所以应该确保指定的字符串和COPY TO相同。
+
+ 取值范围:
+
+ - null值不能是\\r和\\n,最大为100个字符。
+ - null值不能和分隔符、quote参数相同。
+
+ 缺省值:
+
+ - 在TEXT格式下默认值是\\N。
+ - CSV格式下默认值是一个没有引号的空字符串。
+
+ - HEADER
+
+ 指定导出数据文件是否包含标题行,标题行一般用来描述表中每个字段的信息。header只能用于CSV、FIXED格式的文件中。
+
+ 在导入数据时,如果header选项为on,则数据文本第一行会被识别为标题行,会忽略此行。如果header为off,而数据文件中第一行会被识别为数据。
+
+ 在导出数据时,如果header选项为on,则需要指定fileheader。如果header为off,则导出数据文件不包含标题行。
+
+ - FILEHEADER
+
+ 导出数据时用于定义标题行的文件,一般用来描述每一列的数据信息。
+
+ > **须知:**
+ >
+ >- 仅在header为on或true的情况下有效。
+ >
+ >- fileheader指定的是绝对路径。
+ >
+ >- 该文件只能包含一行标题信息,并以换行符结尾,多余的行将被丢弃(标题信息不能包含换行符)。
+ >
+ >- 该文件包括换行符在内长度不超过1M。
+
+ - FREEZE
+
+ 将COPY加载的数据行设置为已经被frozen,就像这些数据行执行过VACUUM FREEZE。
+
+ 这是一个初始数据加载的性能选项。仅当以下三个条件同时满足时,数据行会被frozen:
+
+ - 在同一事务中create或truncate这张表之后执行COPY。
+ - 当前事务中没有打开的游标。
+ - 当前事务中没有原有的快照。
+
+ > **说明:**
+ >
+ >COPY完成后,所有其他会话将会立刻看到这些数据。但是这违反了MVCC可见性的一般原则,用户应当了解这样会导致潜在的风险。
+
+ - FORCE NOT NULL column\_name \[, ...\]
+
+ 在CSV COPY FROM模式下,指定的字段不为空。若输入为空,则将视为长度为0的字符串。
+
+ 取值范围:已存在的字段。
+
+ - FORCE NULL column\_name \[, ...\]
+
+ 在CSV COPY FROM模式下,将指定的字段表示空值的字符串设置为NULL,包括加了引号的空值字符串。
+
+ 取值范围:已存在的字段。
+
+ - FORCE QUOTE \{ column\_name \[, ...\] | \* \}
+
+ 在CSV COPY TO模式下,强制在每个声明的字段周围对所有非NULL值都使用引号包围。NULL输出不会被引号包围。
+
+ 取值范围:已存在的字段。
+
+ - BINARY
+
+ 使用二进制格式存储和读取,而不是以文本的方式。在二进制模式下,不能声明DELIMITER、NULL、CSV选项。指定BINARY类型后,不能再通过option或copy\_option指定CSV、FIXED、TEXT等类型。
+
+ - CSV
+
+ 打开逗号分隔变量(CSV)模式。指定CSV类型后,不能再通过option或copy\_option指定BINARY、FIXED、TEXT等类型。
+
+ - QUOTE \[AS\] 'quote\_character'
+
+ CSV格式文件下的引号字符。
+
+ 缺省值:双引号。
+
+ > **说明:**
+ >
+ >- quote参数不能和分隔符、null参数相同。
+ >- quote参数只能是单字节的字符。
+ >- 推荐不可见字符作为quote,例如0x07、0x08、0x1b等。
+
+ - ESCAPE \[AS\] 'escape\_character'
+
+ CSV格式下,用来指定逃逸字符,逃逸字符只能指定为单字节字符。
+
+ 默认值为双引号。当与quote值相同时,会被替换为'\\0'。
+
+ - EOL 'newline\_character'
+
+ 指定导入导出数据文件换行符样式。
+
+ 取值范围:支持多字符换行符,但换行符不能超过10个字节。常见的换行符,如\\r、\\n、\\r\\n(设成0x0D、0x0A、0x0D0A效果是相同的),其他字符或字符串,如$、\#。
+
+ > **说明:**
+ >
+ >- EOL参数只能用于TEXT格式的导入导出,不支持CSV格式和FIXED格式。为了兼容原有EOL参数,仍然支持导出CSV格式和FIXED格式时指定EOL参数为0x0D或0x0D0A。
+ >- EOL参数不能和分隔符、null参数相同。
+ >- EOL参数不能包含:.abcdefghijklmnopqrstuvwxyz0123456789。
+
+ - ENCODING 'encoding\_name'
+
+ 指定文件编码格式名称。
+
+ 取值范围:有效的编码格式。
+
+ 缺省值:当前编码格式。
+
+ - IGNORE\_EXTRA\_DATA
+
+ 指定当数据源文件比外表定义列数多时,忽略行尾多出来的列。该参数只在数据导入过程中使用。
+
+ 若不使用该参数,在数据源文件比外表定义列数多,会显示如下错误信息。
+
+ ```
+ extra data after last expected column
+ ```
+
+ - COMPATIBLE\_ILLEGAL\_CHARS
+
+ 指定导入时对非法字符进行容错处理,非法字符转换后入库。不报错,不中断导入。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
+
+ 若不使用该参数,导入时遇到非法字符进行报错,中断导入。
+
+ > **说明:**
+ >
+ >导入非法字符容错规则如下:
+ >(1)对于'\\0',容错后转换为空格;
+ >(2)对于其他非法字符,容错后转换为问号;
+ >(3)若compatible\_illegal\_chars为true/on标识,导入时对于非法字符进行容错处理,则若NULL、DELIMITER、QUOTE、ESCAPE设置为空格或问号则会通过如“illegal chars conversion may confuse COPY escape 0x20”等报错信息提示用户修改可能引起混淆的参数以避免导入错误。
+
+ - FILL\_MISSING\_FIELDS
+
+ 当数据加载时,若数据源文件中一行的最后一个字段缺失的处理方式。
+
+ 取值范围:true/on、false/off。
+
+ 缺省值:false/off。
+
+ > **须知:**
+ >
+ >目前COPY指定此Option实际不会生效,即不会有相应的容错处理效果(不生效)。需要额外注意的是,打开此选项会导致解析器在数据库主节点数据解析阶段(即COPY错误表容错的涵盖范围)忽略此数据问题,而到数据库节点重新报错,从而使得COPY错误表(打开LOG ERRORS REJECT LIMIT)在此选项打开的情况下无法成功捕获这类少列的数据异常。因此请不要指定此选项。
+
+ - DATE\_FORMAT 'date\_format\_string'
+
+ 导入对于DATE类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
+
+ 取值范围:合法DATE格式。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)
+
+ > **说明:**
+ >
+ >对于DATE类型内建为TIMESTAMP类型的数据库,在导入的时候,若需指定格式,可以参考下面的timestamp\_format参数。
+
+ - TIME\_FORMAT 'time\_format\_string'
+
+ 导入对于TIME类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
+
+ 取值范围:合法TIME格式,不支持时区。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
+
+ - TIMESTAMP\_FORMAT 'timestamp\_format\_string'
+
+ 导入对于TIMESTAMP类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
+
+ 取值范围:合法TIMESTAMP格式,不支持时区。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
+
+ - SMALLDATETIME\_FORMAT 'smalldatetime\_format\_string'
+
+ 导入对于SMALLDATETIME类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
+
+ 取值范围:合法SMALLDATETIME格式。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
+
+ - TRANSFORM \( \{ column\_name \[ data\_type \] \[ AS transform\_expr \] \} \[, ...\] \)
+
+ 指定表中各个列的转换表达式;其中data\_type指定该列在表达式参数中的数据类型;transform\_expr为目标表达式,返回与表中目标列数据类型一致的结果值,表达式可参考[表达式](表达式.md)。
+
+ COPY FROM能够识别的特殊反斜杠序列如下所示。
+
+ - **\\b**:反斜杠 (ASCII 8)
+ - **\\f**:换页(ASCII 12)
+ - **\\n**:换行符 (ASCII 10)
+ - **\\r**:回车符 (ASCII 13)
+ - **\\t**:水平制表符 (ASCII 9)
+ - **\\v**:垂直制表符 (ASCII 11)
+ - **\\digits**:反斜杠后面跟着一到三个八进制数,表示ASCII值为该数的字符。
+ - **\\xdigits**:反斜杠x后面跟着一个或两个十六进制位声明指定数值编码的字符。
+
+
+## 示例
+
+```
+--将tpcds.ship_mode中的数据拷贝到/home/omm/ds_ship_mode.dat文件中。
+openGauss=# COPY tpcds.ship_mode TO '/home/omm/ds_ship_mode.dat';
+
+--将tpcds.ship_mode 输出到stdout。
+openGauss=# COPY tpcds.ship_mode TO stdout;
+
+--创建tpcds.ship_mode_t1表。
+openGauss=# CREATE TABLE tpcds.ship_mode_t1
+(
+ SM_SHIP_MODE_SK INTEGER NOT NULL,
+ SM_SHIP_MODE_ID CHAR(16) NOT NULL,
+ SM_TYPE CHAR(30) ,
+ SM_CODE CHAR(10) ,
+ SM_CARRIER CHAR(20) ,
+ SM_CONTRACT CHAR(20)
+)
+WITH (ORIENTATION = COLUMN,COMPRESSION=MIDDLE)
+;
+
+--从stdin拷贝数据到表tpcds.ship_mode_t1。
+openGauss=# COPY tpcds.ship_mode_t1 FROM stdin;
+
+--从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1。
+openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat';
+
+--从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1,应用TRANSFORM表达式转换,取SM_TYPE列左边10个字符插入到表中。
+openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' TRANSFORM (SM_TYPE AS LEFT(SM_TYPE, 10));
+
+--从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1,使用参数如下:导入格式为TEXT(format 'text'),分隔符为'\t'(delimiter E'\t'),忽略多余列(ignore_extra_data 'true'),不指定转义(noescaping 'true')。
+openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' WITH(format 'text', delimiter E'\t', ignore_extra_data 'true', noescaping 'true');
+
+--从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1,使用参数如下:导入格式为FIXED(FIXED),指定定长格式(FORMATTER(SM_SHIP_MODE_SK(0, 2), SM_SHIP_MODE_ID(2,16), SM_TYPE(18,30), SM_CODE(50,10), SM_CARRIER(61,20), SM_CONTRACT(82,20))),忽略多余列(ignore_extra_data),有数据头(header)。
+openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' FIXED FORMATTER(SM_SHIP_MODE_SK(0, 2), SM_SHIP_MODE_ID(2,16), SM_TYPE(18,30), SM_CODE(50,10), SM_CARRIER(61,20), SM_CONTRACT(82,20)) header ignore_extra_data;
+
+--删除tpcds.ship_mode_t1。
+openGauss=# DROP TABLE tpcds.ship_mode_t1;
+```
+
--
Gitee
From 1d8b60ab4d2db51e7af9be0fb35e93fb9679f6d4 Mon Sep 17 00:00:00 2001
From: unknown <895543892@qq.com>
Date: Sat, 26 Nov 2022 11:21:41 +0800
Subject: [PATCH 4/4] =?UTF-8?q?copy=E6=96=87=E6=A1=A3=E5=AE=8C=E5=96=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
content/zh/docs/Developerguide/COPY.md.bak | 660 ---------------------
1 file changed, 660 deletions(-)
delete mode 100644 content/zh/docs/Developerguide/COPY.md.bak
diff --git a/content/zh/docs/Developerguide/COPY.md.bak b/content/zh/docs/Developerguide/COPY.md.bak
deleted file mode 100644
index 07c778c17..000000000
--- a/content/zh/docs/Developerguide/COPY.md.bak
+++ /dev/null
@@ -1,660 +0,0 @@
-# COPY
-
-## 功能描述
-
-通过COPY命令实现在表和文件之间拷贝数据。
-
-COPY FROM从一个文件拷贝数据到一个表,COPY TO把一个表的数据拷贝到一个文件。
-
-## 注意事项
-
-- 当参数enable\_copy\_server\_files关闭时,只允许初始用户执行COPY FROM FILENAME或COPY TO FILENAME命令,当参数enable\_copy\_server\_files打开,允许具有SYSADMIN权限的用户或继承了内置角色gs\_role\_copy\_files权限的用户执行,但默认禁止对数据库配置文件、密钥文件、证书文件和审计日志执行COPY FROM FILENAME或COPY TO FILENAME,以防止用户越权查看或修改敏感文件。
-- COPY只能用于表,不能用于视图。
-- COPY TO需要读取的表的select权限,copy from需要插入的表的insert权限。
-- 如果声明了一个字段列表,COPY将只在文件和表之间拷贝已声明字段的数据。如果表中有任何不在字段列表里的字段,COPY FROM将为那些字段插入缺省值。
-- 如果声明了数据源文件,服务器必须可以访问该文件;如果指定了STDIN,数据将在客户前端和服务器之间流动,输入时,表的列与列之间使用TAB键分隔,在新的一行中以反斜杠和句点(\\.)表示输入结束。
-- 如果数据文件的任意行包含比预期多或者少的字段,COPY FROM将抛出一个错误。
-- 数据的结束可以用一个只包含反斜杠和句点(\\.)的行表示。如果从文件中读取数据,数据结束的标记是不必要的;如果在客户端应用之间拷贝数据,必须要有结束标记。
-- COPY FROM中\\N为空字符串,如果要输入实际数据值\\N ,使用\\\\N。
-
-- COPY FROM不支持在导入过程中对数据做预处理(比如说表达式运算、填充指定默认值等)。如果需要在导入过程中对数据做预处理,用户需先把数据导入到临时表中,然后执行SQL语句通过运算插入到表中,但此方法会导致I/O膨胀,降低导入性能。
-- COPY FROM在遇到数据格式错误时会回滚事务,但没有足够的错误信息,不方便用户从大量的原始数据中定位错误数据。
-- COPY FROM/TO适合低并发,本地小数据量导入导出。
-- 目标表存在trigger,支持COPY操作。
-
-## 语法格式
-
-- 从一个文件拷贝数据到一个表。
-
- ```
- COPY table_name [ ( column_name [, ...] ) ]
- FROM { 'filename' | STDIN }
- [ [ USING ] DELIMITERS 'delimiters' ]
- [ WITHOUT ESCAPING ]
- [ LOG ERRORS ]
- [ LOG ERRORS DATA ]
- [ REJECT LIMIT 'limit' ]
- [ [ WITH ] ( option [, ...] ) ]
- | copy_option
- | [ FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) ]
- | [ TRANSFORM ( { column_name [ data_type ] [ AS transform_expr ] } [, ...] ) ];
- ```
-
- > **说明:**
- >语法中的FIXED FORMATTER \( \{ column\_name\( offset, length \) \} \[, ...\] \)以及 \[ \( option \[, ...\] \) | copy\_option \[ ...\] \] 可以任意排列组合。
-
-- 把一个表的数据拷贝到一个文件。
-
- ```
- COPY table_name [ ( column_name [, ...] ) ]
- TO { 'filename' | STDOUT }
- [ [ USING ] DELIMITERS 'delimiters' ]
- [ WITHOUT ESCAPING ]
- [ [ WITH ] ( option [, ...] ) ]
- | copy_option
- | [ FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) ];
-
- COPY query
- TO { 'filename' | STDOUT }
- [ WITHOUT ESCAPING ]
- [ [ WITH ] ( option [, ...] ) ]
- | copy_option
- | [ FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) ];
- ```
-
- > **说明:**
- >1. COPY TO语法形式约束如下:
- > \(query\)与\[USING\] DELIMITER不兼容,即若COPY TO的数据来自于一个query的查询结果,那么COPY TO语法不能再指定\[USING\] DELIMITERS语法子句。
- >2. 对于FIXED FORMATTTER语法后面跟随的copy\_option是以空格进行分隔的。
- >3. copy\_option是指COPY原生的参数形式,而option是兼容外表导入的参数形式。
- >4. 语法中的FIXED FORMATTER \( \{ column\_name\( offset, length \) \} \[, ...\] \)以及 \[ \( option \[, ...\] \) | copy\_option \[ ...\] \] 可以任意排列组合。
-
- 其中可选参数option子句语法为:
-
- ```
- FORMAT format_name
- | OIDS [ boolean ]
- | DELIMITER 'delimiter_character'
- | NULL 'null_string'
- | HEADER [ boolean ]
- | FILEHEADER 'header_file_string'
- | FREEZE [ boolean ]
- | QUOTE 'quote_character'
- | ESCAPE 'escape_character'
- | EOL 'newline_character'
- | NOESCAPING [ boolean ]
- | FORCE_QUOTE { ( column_name [, ...] ) | * }
- | FORCE_NOT_NULL ( column_name [, ...] )
- | ENCODING 'encoding_name'
- | IGNORE_EXTRA_DATA [ boolean ]
- | FILL_MISSING_FIELDS [ boolean ]
- | COMPATIBLE_ILLEGAL_CHARS [ boolean ]
- | DATE_FORMAT 'date_format_string'
- | TIME_FORMAT 'time_format_string'
- | TIMESTAMP_FORMAT 'timestamp_format_string'
- | SMALLDATETIME_FORMAT 'smalldatetime_format_string'
- ```
-
- 其中可选参数copy\_option子句语法为:
-
- ```
- OIDS
- | NULL 'null_string'
- | HEADER
- | FILEHEADER 'header_file_string'
- | FREEZE
- | FORCE NOT NULL column_name [, ...]
- | FORCE QUOTE { column_name [, ...] | * }
- | BINARY
- | CSV
- | QUOTE [ AS ] 'quote_character'
- | ESCAPE [ AS ] 'escape_character'
- | EOL 'newline_character'
- | ENCODING 'encoding_name'
- | IGNORE_EXTRA_DATA
- | FILL_MISSING_FIELDS
- | COMPATIBLE_ILLEGAL_CHARS
- | DATE_FORMAT 'date_format_string'
- | TIME_FORMAT 'time_format_string'
- | TIMESTAMP_FORMAT 'timestamp_format_string'
- | SMALLDATETIME_FORMAT 'smalldatetime_format_string'
- ```
-
-
-## 参数说明
-
-- **query**
-
- 其结果将被拷贝。
-
- 取值范围:一个必须用圆括弧包围的SELECT或VALUES命令。
-
-- **table\_name**
-
- 表的名称(可以有模式修饰)。
-
- 取值范围:已存在的表名。
-
-- **column\_name**
-
- 可选的待拷贝字段列表。
-
- 取值范围:如果没有声明字段列表,将使用所有字段。
-
-- **STDIN**
-
- 声明输入是来自标准输入。
-
-- **STDOUT**
-
- 声明输出打印到标准输出。
-
-- **FIXED**
-
- 打开字段固定长度模式。在字段固定长度模式下,不能声明DELIMITER、NULL、CSV选项。指定FIXED类型后,不能再通过option或copy\_option指定BINARY、CSV、TEXT等类型。
-
- > **说明:**
- >定长格式定义如下:
- >1. 每条记录的每个字段长度相同。
- >2. 长度不足的字段以空格填充,数字类型字段左对齐,字符字段右对齐。
- >3. 字段和字段之间没有分隔符。
-
-- **\[USING\] DELIMITER 'delimiters'**
-
- 在文件中分隔各个字段的字符串,分隔符最大长度不超过10个字节。
-
- 取值范围:不允许包含\\.abcdefghijklmnopqrstuvwxyz0123456789中的任何一个字符。
-
- 缺省值:在文本模式下,缺省是水平制表符,在CSV模式下是一个逗号。
-
-- **WITHOUT ESCAPING**
-
- 在TEXT格式中,不对'\\'和后面的字符进行转义。
-
- 取值范围:仅支持TEXT格式。
-
-- **LOG ERRORS**
-
- 若指定,则开启对于COPY FROM语句中数据类型错误的容错机制。
-
- 取值范围:仅支持导入(即COPY FROM)时指定。
-
- > **说明:**
- >
- >此容错选项的使用限制如下:
- >
- >- 此容错机制仅捕捉COPY FROM过程中数据库主节点上数据解析过程中相关的数据类型错误(DATA\_EXCEPTION)。
- >- COPY已有的容错选项(如IGNORE\_EXTRA\_DATA)开启时,对应类型的错误会按照已有的方式处理而不会报出异常,因此错误表也不会有相应数据。
-
-- **LOG ERRORS DATA**
-
- LOG ERRORS DATA和LOG ERRORS的区别:
-
- 1. LOG ERRORS DATA会填充容错表的rawrecord字段。
- 2. 只有supper权限的用户才能使用LOG ERRORS DATA参数选项。
-
- > **注意:**
- >使用**“LOG ERRORS DATA”**时,若错误内容过于复杂可能存在写入容错表失败的风险,导致任务失败。
-
-
-- **REJECT LIMIT** **'imit'**
-
- 与LOG ERROR选项共同使用,对COPY FROM的容错机制设置数值上限,一旦此COPY FROM语句错误数据超过选项指定条数,则会按照原有机制报错。
-
- 取值范围:正整数(1-INTMAX),'unlimited'(无最大值限制)
-
- 缺省值:若未指定LOG ERRORS,则会报错;若指定LOG ERRORS,则默认为0。
-
- > **说明:**
- >如上述LOG ERRORS中描述的容错机制,REJECT LIMIT的计数也是按照执行COPY FROM的数据库主节点上遇到的解析错误数量计算,而不是数据库节点的错误数量。
-
-- **FORMATTER**
-
- 在固定长度模式中,定义每一个字段在数据文件中的位置。按照column\(offset,length\)格式定义每一列在数据文件中的位置。
-
- 取值范围:
-
- - offset取值不能小于0,以字节为单位。
- - length取值不能小于0,以字节为单位。
-
- 所有列的总长度和不能大于1GB。
-
- 文件中没有出现的列默认以空值代替。
-
-- **OPTION \{ option\_name ' value ' \}**
-
- 用于指定兼容外表的各类参数。
-
- - FORMAT
-
- 数据源文件的格式。
-
- 取值范围:CSV、TEXT、FIXED、BINARY。
-
- - CSV格式的文件,可以有效处理数据列中的换行符,但对一些特殊字符处理有欠缺。
- - TEXT格式的文件,可以有效处理一些特殊字符,但无法正确处理数据列中的换行符。
- - FIXED格式的文件,适用于每条数据的数据列都比较固定的数据,长度不足的列会添加空格补齐,过长的列则会自动截断。
- - BINARY形式的选项会使得所有的数据被存储/读作二进制格式而不是文本。 这比TEXT和CSV格式的要快一些,但是一个BINARY格式文件可移植性比较差。
-
- 缺省值:TEXT
-
- - DELIMITER
-
- 指定数据文件行数据的字段分隔符。
-
- > **说明:**
- >
- >- 分隔符不能是\\r和\\n。
- >
- >- 分隔符不能和null参数相同,CSV格式数据的分隔符不能和quote参数相同。
- >
- >- TEXT格式数据的分隔符不能包含:小写字母、数字和特殊字符.\\。
- >
- >- 数据文件中单行数据长度需<1GB,如果分隔符较长且数据列较多的情况下,会影响导出有效数据的长度。
- >
- >- 分隔符推荐使用多字符和不可见字符。多字符例如'$^&';不可见字符例如0x07、0x08、0x1b等。
-
- 取值范围:支持多字符分隔符,但分隔符不能超过10个字节。
-
- 缺省值:
-
- - TEXT格式的默认分隔符是水平制表符(tab)。
- - CSV格式的默认分隔符为“,”。
- - FIXED格式没有分隔符。
-
- - NULL
-
- 用来指定数据文件中空值的表示。
-
- 取值范围:
-
- - null值不能是\\r和\\n,最大为100个字符。
- - null值不能和分隔符、quote参数相同。
-
- 缺省值:
-
- - CSV格式下默认值是一个没有引号的空字符串。
- - 在TEXT格式下默认值是\\N。
-
- - HEADER
-
- 指定导出数据文件是否包含标题行,标题行一般用来描述表中每个字段的信息。header只能用于CSV、FIXED格式的文件中。
-
- 在导入数据时,如果header选项为on,则数据文本第一行会被识别为标题行,会忽略此行。如果header为off,而数据文件中第一行会被识别为数据。
-
- 在导出数据时,如果header选项为on,则需要指定fileheader。如果header为off,则导出数据文件不包含标题行。
-
- 取值范围:true/on、false/off。
-
- 缺省值:false
-
- - QUOTE
-
- CSV格式文件下的引号字符。
-
- 缺省值:双引号
-
- > **说明:**
- >
- >- quote参数不能和分隔符、null参数相同。
- >- quote参数只能是单字节的字符。
- >- 推荐不可见字符作为quote,例如0x07、0x08、0x1b等。
- >- 例如quote e'\x22' :使用ASCII编码为16进制22的字符。
-
- - ESCAPE
-
- CSV格式下,用来指定逃逸字符,逃逸字符只能指定为单字节字符。
-
- 缺省值:双引号。当与quote值相同时,会被替换为'\\0'。
-
- - EOL 'newline\_character'
-
- 指定导入导出数据文件换行符样式。
-
- 取值范围:支持多字符换行符,但换行符不能超过10个字节。常见的换行符,如\\r、\\n、\\r\\n(设成0x0D、0x0A、0x0D0A效果是相同的),其他字符或字符串,如$、\#。
-
- > **说明:**
- >
- >- EOL参数只能用于TEXT格式的导入导出,不支持CSV格式和FIXED格式导入。为了兼容原有EOL参数,仍然支持导出CSV格式和FIXED格式时指定EOL参数为0x0D或0x0D0A。
- >
- >- EOL参数不能和分隔符、null参数相同。
- >
- >- EOL参数不能包含:.abcdefghijklmnopqrstuvwxyz0123456789。
-
- - FORCE\_QUOTE \{ \( column\_name \[, ...\] \) | \* \}
-
- 在CSV COPY TO模式下,强制在每个声明的字段周围对所有非NULL值都使用引号包围。NULL输出不会被引号包围。
-
- 取值范围:已存在的字段。
-
- - FORCE\_NOT\_NULL \( column\_name \[, ...\] \)
-
- 此函数指定的列将不会把输入匹配(识别)为 null 字符串。null 值字符串将被默认为空字符串,即长度为零的字符串而不是 null,即使它们没有用引号引起来。
- 此选项仅允许在“COPY FROM”语句中,并且仅在指定为 CSV 格式时被允许使用。
-
-
- 取值范围:已存在的字段。
-
- - ENCODING
-
- 指定数据文件的编码格式名称,缺省为当前数据库编码格式。
-
- - IGNORE\_EXTRA\_DATA
-
- 若数据源文件比外表定义列数多,是否会忽略对多出的列。该参数只在数据导入过程中使用。
-
- 取值范围:true/on、false/off。
-
- - 参数为true/on,若数据源文件比外表定义列数多,则忽略行尾多出来的列。
- - 参数为false/off,若数据源文件比外表定义列数多,会显示如下错误信息。
-
- ```
- extra data after last expected column
- ```
-
- 缺省值:false。
-
- > **须知:**
- >
- >如果行尾换行符丢失,使两行变成一行时,设置此参数为true将导致后一行数据被忽略掉。
-
- - COMPATIBLE\_ILLEGAL\_CHARS
-
- 导入非法字符容错参数。此语法仅对COPY FROM导入有效。
-
- 取值范围:true/on、false/off。
-
- - 参数为true/on,则导入时遇到非法字符进行容错处理,非法字符转换后入库,不报错,不中断导入。
- - 参数为false/off,导入时遇到非法字符进行报错,中断导入。
-
- 缺省值:false/off
-
- > **说明:**
- >
- >导入非法字符容错规则如下:
- >
- >(1)对于'\\0',容错后转换为空格;
- >
- >(2)对于其他非法字符,容错后转换为问号;
- >
- >(3)若compatible\_illegal\_chars为true/on标识导入时对于非法字符进行容错处理,则若NULL、DELIMITER、QUOTE、ESCAPE设置为空格或问号则会通过如“illegal chars conversion may confuse COPY escape 0x20”等报错信息提示用户修改可能引起混淆的参数以避免导入错误。
-
- - FILL\_MISSING\_FIELDS
-
- 当数据加载时,若数据源文件中一行的最后一个字段缺失的处理方式。
-
- 取值范围:true/on、false/off。
-
- 缺省值:false/off
-
- - DATE\_FORMAT
-
- 导入对于DATE类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
-
- 取值范围:合法DATE格式。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
-
- > **说明:**
- >
- >对于DATE类型内建为TIMESTAMP类型的数据库,在导入的时候,若需指定格式,可以参考下面的timestamp\_format参数。
-
- - TIME\_FORMAT
-
- 导入对于TIME类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
-
- 取值范围:合法TIME格式,不支持时区。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
-
- - TIMESTAMP\_FORMAT
-
- 导入对于TIMESTAMP类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
-
- 取值范围:合法TIMESTAMP格式,不支持时区。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
-
- - SMALLDATETIME\_FORMAT
-
- 导入对于SMALLDATETIME类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
-
- 取值范围:合法SMALLDATETIME格式。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
-
-
-- **COPY\_OPTION \{ option\_name ' value ' \}**
-
- 用于指定COPY原生的各类参数。
-
- - NULL null\_string
-
- 用来指定数据文件中空值的表示。
-
- > **须知:**
- >
- >在使用COPY FROM的时候,任何匹配这个字符串的字符串将被存储为NULL值,所以应该确保指定的字符串和COPY TO相同。
-
- 取值范围:
-
- - null值不能是\\r和\\n,最大为100个字符。
- - null值不能和分隔符、quote参数相同。
-
- 缺省值:
-
- - 在TEXT格式下默认值是\\N。
- - CSV格式下默认值是一个没有引号的空字符串。
-
- - HEADER
-
- 指定导出数据文件是否包含标题行,标题行一般用来描述表中每个字段的信息。header只能用于CSV、FIXED格式的文件中。
-
- 在导入数据时,如果header选项为on,则数据文本第一行会被识别为标题行,会忽略此行。如果header为off,而数据文件中第一行会被识别为数据。
-
- 在导出数据时,如果header选项为on,则需要指定fileheader。如果header为off,则导出数据文件不包含标题行。
-
- - FILEHEADER
-
- 导出数据时用于定义标题行的文件,一般用来描述每一列的数据信息。
-
- > **须知:**
- >
- >- 仅在header为on或true的情况下有效。
- >
- >- fileheader指定的是绝对路径。
- >
- >- 该文件只能包含一行标题信息,并以换行符结尾,多余的行将被丢弃(标题信息不能包含换行符)。
- >
- >- 该文件包括换行符在内长度不超过1M。
-
- - FREEZE
-
- 将COPY加载的数据行设置为已经被frozen,就像这些数据行执行过VACUUM FREEZE。
-
- 这是一个初始数据加载的性能选项。仅当以下三个条件同时满足时,数据行会被frozen:
-
- - 在同一事务中create或truncate这张表之后执行COPY。
- - 当前事务中没有打开的游标。
- - 当前事务中没有原有的快照。
-
- > **说明:**
- >
- >COPY完成后,所有其他会话将会立刻看到这些数据。但是这违反了MVCC可见性的一般原则,用户应当了解这样会导致潜在的风险。
-
- - FORCE NOT NULL column\_name \[, ...\]
-
- 在CSV COPY FROM模式下,指定的字段不为空。若输入为空,则将视为长度为0的字符串。
-
- 取值范围:已存在的字段。
-
- - FORCE NULL column\_name \[, ...\]
-
- 在CSV COPY FROM模式下,将指定的字段表示空值的字符串设置为NULL,包括加了引号的空值字符串。
-
- 取值范围:已存在的字段。
-
- - FORCE QUOTE \{ column\_name \[, ...\] | \* \}
-
- 在CSV COPY TO模式下,强制在每个声明的字段周围对所有非NULL值都使用引号包围。NULL输出不会被引号包围。
-
- 取值范围:已存在的字段。
-
- - BINARY
-
- 使用二进制格式存储和读取,而不是以文本的方式。在二进制模式下,不能声明DELIMITER、NULL、CSV选项。指定BINARY类型后,不能再通过option或copy\_option指定CSV、FIXED、TEXT等类型。
-
- - CSV
-
- 打开逗号分隔变量(CSV)模式。指定CSV类型后,不能再通过option或copy\_option指定BINARY、FIXED、TEXT等类型。
-
- - QUOTE \[AS\] 'quote\_character'
-
- CSV格式文件下的引号字符。
-
- 缺省值:双引号。
-
- > **说明:**
- >
- >- quote参数不能和分隔符、null参数相同。
- >- quote参数只能是单字节的字符。
- >- 推荐不可见字符作为quote,例如0x07、0x08、0x1b等。
-
- - ESCAPE \[AS\] 'escape\_character'
-
- CSV格式下,用来指定逃逸字符,逃逸字符只能指定为单字节字符。
-
- 默认值为双引号。当与quote值相同时,会被替换为'\\0'。
-
- - EOL 'newline\_character'
-
- 指定导入导出数据文件换行符样式。
-
- 取值范围:支持多字符换行符,但换行符不能超过10个字节。常见的换行符,如\\r、\\n、\\r\\n(设成0x0D、0x0A、0x0D0A效果是相同的),其他字符或字符串,如$、\#。
-
- > **说明:**
- >
- >- EOL参数只能用于TEXT格式的导入导出,不支持CSV格式和FIXED格式。为了兼容原有EOL参数,仍然支持导出CSV格式和FIXED格式时指定EOL参数为0x0D或0x0D0A。
- >- EOL参数不能和分隔符、null参数相同。
- >- EOL参数不能包含:.abcdefghijklmnopqrstuvwxyz0123456789。
-
- - ENCODING 'encoding\_name'
-
- 指定文件编码格式名称。
-
- 取值范围:有效的编码格式。
-
- 缺省值:当前编码格式。
-
- - IGNORE\_EXTRA\_DATA
-
- 指定当数据源文件比外表定义列数多时,忽略行尾多出来的列。该参数只在数据导入过程中使用。
-
- 若不使用该参数,在数据源文件比外表定义列数多,会显示如下错误信息。
-
- ```
- extra data after last expected column
- ```
-
- - COMPATIBLE\_ILLEGAL\_CHARS
-
- 指定导入时对非法字符进行容错处理,非法字符转换后入库。不报错,不中断导入。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
-
- 若不使用该参数,导入时遇到非法字符进行报错,中断导入。
-
- > **说明:**
- >
- >导入非法字符容错规则如下:
- >(1)对于'\\0',容错后转换为空格;
- >(2)对于其他非法字符,容错后转换为问号;
- >(3)若compatible\_illegal\_chars为true/on标识,导入时对于非法字符进行容错处理,则若NULL、DELIMITER、QUOTE、ESCAPE设置为空格或问号则会通过如“illegal chars conversion may confuse COPY escape 0x20”等报错信息提示用户修改可能引起混淆的参数以避免导入错误。
-
- - FILL\_MISSING\_FIELDS
-
- 当数据加载时,若数据源文件中一行的最后一个字段缺失的处理方式。
-
- 取值范围:true/on、false/off。
-
- 缺省值:false/off。
-
- > **须知:**
- >
- >目前COPY指定此Option实际不会生效,即不会有相应的容错处理效果(不生效)。需要额外注意的是,打开此选项会导致解析器在数据库主节点数据解析阶段(即COPY错误表容错的涵盖范围)忽略此数据问题,而到数据库节点重新报错,从而使得COPY错误表(打开LOG ERRORS REJECT LIMIT)在此选项打开的情况下无法成功捕获这类少列的数据异常。因此请不要指定此选项。
-
- - DATE\_FORMAT 'date\_format\_string'
-
- 导入对于DATE类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
-
- 取值范围:合法DATE格式。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)
-
- > **说明:**
- >
- >对于DATE类型内建为TIMESTAMP类型的数据库,在导入的时候,若需指定格式,可以参考下面的timestamp\_format参数。
-
- - TIME\_FORMAT 'time\_format\_string'
-
- 导入对于TIME类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
-
- 取值范围:合法TIME格式,不支持时区。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
-
- - TIMESTAMP\_FORMAT 'timestamp\_format\_string'
-
- 导入对于TIMESTAMP类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
-
- 取值范围:合法TIMESTAMP格式,不支持时区。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
-
- - SMALLDATETIME\_FORMAT 'smalldatetime\_format\_string'
-
- 导入对于SMALLDATETIME类型指定格式。此参数不支持BINARY格式,会报“cannot specify bulkload compatibility options in BINARY mode”错误信息。此参数仅对COPY FROM导入有效。
-
- 取值范围:合法SMALLDATETIME格式。可参考[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。
-
- - TRANSFORM \( \{ column\_name \[ data\_type \] \[ AS transform\_expr \] \} \[, ...\] \)
-
- 指定表中各个列的转换表达式;其中data\_type指定该列在表达式参数中的数据类型;transform\_expr为目标表达式,返回与表中目标列数据类型一致的结果值,表达式可参考[表达式](表达式.md)。
-
- COPY FROM能够识别的特殊反斜杠序列如下所示。
-
- - **\\b**:反斜杠 (ASCII 8)
- - **\\f**:换页(ASCII 12)
- - **\\n**:换行符 (ASCII 10)
- - **\\r**:回车符 (ASCII 13)
- - **\\t**:水平制表符 (ASCII 9)
- - **\\v**:垂直制表符 (ASCII 11)
- - **\\digits**:反斜杠后面跟着一到三个八进制数,表示ASCII值为该数的字符。
- - **\\xdigits**:反斜杠x后面跟着一个或两个十六进制位声明指定数值编码的字符。
-
-
-## 示例
-
-```
---将tpcds.ship_mode中的数据拷贝到/home/omm/ds_ship_mode.dat文件中。
-openGauss=# COPY tpcds.ship_mode TO '/home/omm/ds_ship_mode.dat';
-
---将tpcds.ship_mode 输出到stdout。
-openGauss=# COPY tpcds.ship_mode TO stdout;
-
---创建tpcds.ship_mode_t1表。
-openGauss=# CREATE TABLE tpcds.ship_mode_t1
-(
- SM_SHIP_MODE_SK INTEGER NOT NULL,
- SM_SHIP_MODE_ID CHAR(16) NOT NULL,
- SM_TYPE CHAR(30) ,
- SM_CODE CHAR(10) ,
- SM_CARRIER CHAR(20) ,
- SM_CONTRACT CHAR(20)
-)
-WITH (ORIENTATION = COLUMN,COMPRESSION=MIDDLE)
-;
-
---从stdin拷贝数据到表tpcds.ship_mode_t1。
-openGauss=# COPY tpcds.ship_mode_t1 FROM stdin;
-
---从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1。
-openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat';
-
---从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1,应用TRANSFORM表达式转换,取SM_TYPE列左边10个字符插入到表中。
-openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' TRANSFORM (SM_TYPE AS LEFT(SM_TYPE, 10));
-
---从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1,使用参数如下:导入格式为TEXT(format 'text'),分隔符为'\t'(delimiter E'\t'),忽略多余列(ignore_extra_data 'true'),不指定转义(noescaping 'true')。
-openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' WITH(format 'text', delimiter E'\t', ignore_extra_data 'true', noescaping 'true');
-
---从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1,使用参数如下:导入格式为FIXED(FIXED),指定定长格式(FORMATTER(SM_SHIP_MODE_SK(0, 2), SM_SHIP_MODE_ID(2,16), SM_TYPE(18,30), SM_CODE(50,10), SM_CARRIER(61,20), SM_CONTRACT(82,20))),忽略多余列(ignore_extra_data),有数据头(header)。
-openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' FIXED FORMATTER(SM_SHIP_MODE_SK(0, 2), SM_SHIP_MODE_ID(2,16), SM_TYPE(18,30), SM_CODE(50,10), SM_CARRIER(61,20), SM_CONTRACT(82,20)) header ignore_extra_data;
-
---删除tpcds.ship_mode_t1。
-openGauss=# DROP TABLE tpcds.ship_mode_t1;
-```
-
--
Gitee