【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;