【openGauss/MogDB】一种对数据库的列表型参数进行设置的方式

背景

在openGauss/MogDB数据库中,有些数据库参数是列表形式(比如behavior_compat_options、sql_beta_feature、rewrite_rule、plsql_compile_check_options等),如果想对这个列表增加删除值时,需要先查出当前值,然后修改当前值的字符串,再set上去,操作比较麻烦。
本文通过创建一组自定义函数,来对这样的列表型参数进行更简单的设置

函数定义

create function current_setting_as_table (text) returns table(value text) as $$ select unnest(string_to_array( current_setting($1) ,',')); $$language sql; create or replace function set_config_add_value (text, text, bool) returns setOF TEXT as $$ declare begin if not $2=any(string_to_array( current_setting($1) ,',')) then set_config($1,current_setting($1)||','||$2,$3); end if; return query SELECT unnest(string_to_array( current_setting($1) ,',')); end; $$language plpgsql; create or replace function set_config_del_value (text, text, bool) returns setOF TEXT as $$ declare begin if $2=any(string_to_array( current_setting($1) ,',')) then set_config($1,array_to_string(array_remove(string_to_array( current_setting($1) ,','),$2),','),$3); end if; return query SELECT unnest(string_to_array( current_setting($1) ,',')); end; $$language plpgsql;