ITPub博客

首页 > 数据库 > 国内数据库 > openGauss/MOGDB Copy支持容错机制

openGauss/MOGDB Copy支持容错机制

原创 国内数据库 作者:T1YSL 时间:2022-03-10 16:37:20 0 删除 编辑

一、COPY容错机制相关选项

MOGDB/openGauss允许用户在使用Copy From指令时指定容错选项,使得Copy From语句在执行过程中部分解析、数据格式、字符集等相关的报错不会报错中断事务、而是被记录至错误表中,使得在Copy From的目标文件即使有少量数据错误也可以完成入库操作。用户随后可以在错误表中对相关的错误进行定位以及进一步排查。

主要包括三个主要的选项:

  • LOG ERRORS
    若指定,则开启对于COPY FROM语句中数据类型错误的容错机制
  • LOG ERRORS DATA
    LOG ERRORS DATA和LOG ERRORS的区别:
    1. LOG ERRORS DATA会填充容错表的rawrecord字段。
    2. 只有supper权限的用户才能使用LOG ERRORS DATA参数选项。
  • REJECT LIMIT 'limit’
    与LOG ERROR选项共同使用,对COPY FROM的容错机制设置数值上限,一旦此COPY FROM语句错误数据超过选项指定条数,则会按照原有机制报错。
    取值范围:正整数(1-INTMAX),‘unlimited’(无最大值限制)

1646888448378.png

二、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错误表,仅仅带上容错选项的话,会有如下相关提示。
1646889052557.png

执行 pg_catalog.copy_error_log_create()创建copy错误表
1646889452443.png

三、COPY FROM存在错误的数据

再执行copy命令,报错的copy数据会被记录到public.pgxc_copy_error_log 里而不会影响其他正确的数据的导入。

1646890609603.png
1646890472876.png

注意要指定REJECT LIMIT ‘limit’,且limit的值要足够大,否则当COPY FROM语句错误数据超过选项指定条数,则会按照原有机制报错。

表里记录的内容,是通过Log_copy_error_spi函数读取缓存文件中的每一行,并组装spi要执行的查询字符串,把将错误记录插入带有spi的copy_error_Log表中。
1646896503427.png


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69990629/viewspace-2869206/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
中国开源软件推进联盟PG分会系列技术丛书《快速掌握PostgreSQL版本新特性》一书副主编。数据库技术专家。数据库认证讲师、恩墨学院数据库讲师。擅长MySQL数据库、PostgreSQL等开源数据库。拥有MySQL-OCP 、PostgreSQL-PGCM等数据库认证。

注册时间:2020-12-12

  • 博文量
    152
  • 访问量
    160745