openGauss/MOGDB Copy支援容錯機制

T1YSL發表於2022-03-10

一、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部落格 ” ,連結:http://blog.itpub.net/69990629/viewspace-2869206/,如需轉載,請註明出處,否則將追究法律責任。

相關文章