如何删除配置参数
How to remove configuration parameter
在 Postgres 中,可以创建您自己的配置参数,例如 "cookie",在会话或事务期间持续存在。
这样做是这样的:
SELECT set_config(setting_name, new_value, is_local)
or
SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value | 'value' | DEFAULT }
Local 应该只在交易期间持续存在,但即使在交易后它也会影响配置参数 - 而不是无法识别所述参数,它现在将被设置为空字符串。
问题
如何在不重新连接的情况下使所述参数再次无法识别?
这不起作用:
SELECT set_config('settings.myapp.value', null, true);
RESET settings.myapp.value;
这不会 return NULL,而是给出空字符串:
SELECT current_setting('settings.myapp.value', true);
我当然可以解决这个问题,但我想知道我是否可以以某种方式将配置参数的状态恢复到 "transaction only" 更改之前的状态。
SELECT nullif(current_setting('settings.myapp.value', true), '');
你不能那样做。
如果您创建新参数,它将创建为“占位符”参数。
如果您稍后加载定义该参数的模块,它将即时转换为“真实”参数。
但是在数据库会话的生命周期内无法删除参数。
在 Postgres 中,可以创建您自己的配置参数,例如 "cookie",在会话或事务期间持续存在。
这样做是这样的:
SELECT set_config(setting_name, new_value, is_local)
or
SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value | 'value' | DEFAULT }
Local 应该只在交易期间持续存在,但即使在交易后它也会影响配置参数 - 而不是无法识别所述参数,它现在将被设置为空字符串。
问题
如何在不重新连接的情况下使所述参数再次无法识别?
这不起作用:
SELECT set_config('settings.myapp.value', null, true);
RESET settings.myapp.value;
这不会 return NULL,而是给出空字符串:
SELECT current_setting('settings.myapp.value', true);
我当然可以解决这个问题,但我想知道我是否可以以某种方式将配置参数的状态恢复到 "transaction only" 更改之前的状态。
SELECT nullif(current_setting('settings.myapp.value', true), '');
你不能那样做。
如果您创建新参数,它将创建为“占位符”参数。 如果您稍后加载定义该参数的模块,它将即时转换为“真实”参数。
但是在数据库会话的生命周期内无法删除参数。