openGauss
开源数据库
openGauss社区官网
开源社区
openGauss/MOGDB Copy支持容错机制
openGauss/MOGDB Copy 支持容错机制
本文出处:https://www.modb.pro/db/374246
一、COPY 容错机制相关选项
MOGDB/openGauss 允许用户在使用 Copy From 指令时指定容错选项,使得 Copy From 语句在执行过程中部分解析、数据格式、字符集等相关的报错不会报错中断事务、而是被记录至错误表中,使得在 Copy From 的目标文件即使有少量数据错误也可以完成入库操作。用户随后可以在错误表中对相关的错误进行定位以及进一步排查。
主要包括三个主要的选项:
LOG ERRORS 若指定,则开启对于 COPY FROM 语句中数据类型错误的容错机制
LOG ERRORS DATA
LOG ERRORS DATA 和 LOG ERRORS 的区别:
- LOG ERRORS DATA 会填充容错表的 rawrecord 字段。
- 只有 supper 权限的用户才能使用 LOG ERRORS DATA 参数选项。
REJECT LIMIT 'limit’ 与 LOG ERROR 选项共同使用,对 COPY FROM 的容错机制设置数值上限,一旦此 COPY FROM 语句错误数据超过选项指定条数,则会按照原有机制报错。 取值范围:正整数(1-INTMAX),‘unlimited’(无最大值限制)
二、Copy 错误表创建函数
MOGDB/openGauss 里已经给用户提供了封装好的 Copy 错误表创建函数 pg_catalog.copy_error_log_create()。执行就可以创建相应的错误表 public.pgxc_copy_error_log。当然这个函数也可以手动移除重建。如下是重建的函数。
CREATE OR REPLACE FUNCTION pg_catalog.copy_error_log_create()
RETURNS bool
AS $$
DECLARE
query_str_create_table text;
query_str_create_index text;
query_str_do_revoke text;
BEGIN
query_str_create_table := 'CREATE TABLE public.pgxc_copy_error_log
(relname varchar, begintime timestamptz, filename varchar, lineno int8, rawrecord text, detail text)';
EXECUTE query_str_create_table;
query_str_create_index := 'CREATE INDEX copy_error_log_relname_idx ON public.pgxc_copy_error_log(relname)';
EXECUTE query_str_create_index;
query_str_do_revoke := 'REVOKE ALL on public.pgxc_copy_error_log FROM public';
EXECUTE query_str_do_revoke;
return true;
END; $$
LANGUAGE 'plpgsql' NOT FENCED;
REVOKE ALL on FUNCTION pg_catalog.copy_error_log_create() FROM public;
如果不创建copy错误表,仅仅带上容错选项的话,会有如下相关提示。
执行 pg_catalog.copy_error_log_create()创建copy错误表
三、COPY FROM 存在错误的数据
再执行 copy 命令,报错的 copy 数据会被记录到 public.pgxc_copy_error_log 里而不会影响其他正确的数据的导入。
注意要指定 REJECT LIMIT ‘limit’,且 limit 的值要足够大,否则当 COPY FROM 语句错误数据超过选项指定条数,则会按照原有机制报错。
表里记录的内容,是通过 Log_copy_error_spi 函数读取缓存文件中的每一行,并组装 spi 要执行的查询字符串,把将错误记录插入带有 spi 的 copy_error_Log 表中。