代码之家  ›  专栏  ›  技术社区  ›  Łukasz Kamiński

如何删除配置参数

  •  0
  • Łukasz Kamiński  · 技术社区  · 6 年前

    在Postgres中,可以创建自己的配置参数,比如“cookie”,在会话或事务的持续时间内保持不变。

    这样做:

    SELECT set_config(setting_name, new_value, is_local)
    or
    SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value | 'value' | DEFAULT }
    

    本地应该只在事务的持续时间内保持,但它会影响配置参数,即使在事务之后也会影响配置参数—现在,它将被设置为空字符串,而不是无法识别所述参数。

    问题

    如何在不重新连接的情况下使所述参数再次无法识别?

    这不起作用:

    SELECT set_config('settings.myapp.value', null, true);
    RESET settings.myapp.value;
    

    这不会返回空值,而是提供空字符串:

    SELECT current_setting('settings.myapp.value', true);
    

    当然,我可以解决这个问题,但我想知道是否可以以某种方式将配置参数的状态恢复到“仅事务”更改之前的状态。

    SELECT nullif(current_setting('settings.myapp.value', true), '');
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Laurenz Albe    6 年前

    你不能那样做。

    如果创建一个新参数,它将被创建为“占位符”参数。 如果您稍后加载一个定义该参数的模块,它将被动态转换为“real”参数。

    但在数据库会话的生命周期中,无法删除参数。