postgresql postgresql-9.2

postgresql - Compruebe el valor con current_setting()



postgresql-9.2 (1)

Estoy tratando de trabajar con current_setting() .

Se me ocurrió esto:

CREATE OR REPLACE FUNCTION process_audit() RETURNS TRIGGER AS $audit$ DECLARE user_id integer; BEGIN BEGIN user_id := current_setting(''hws.current_user_id''); EXCEPTION WHEN OTHERS THEN user_id := NULL; END; ... RETURN NULL; END; $audit$ LANGUAGE plpgsql;

El ajuste se establece a través de:

SELECT set_config(''hws.current_user_id'', ''5'', true); -- true = local setting -> only visible in current transaction

El problema es que current_setting() lanza una excepción si el valor no es válido. No quiero usar EXCEPTION porque leí que los bloques de excepción son caros.

¿Hay alguna forma de verificar si la configuración tiene un valor sin usar excepciones?

Por cierto: también intenté leer desde pg_settings pero eso no parece funcionar con la configuración local.


9.6 y más reciente:

PostgreSQL (9.6+) admite current_setting(''setting_name'', ''t'') para recuperar una configuración y devolver NULL si no está configurado. puede combinar esto con coalesce para proporcionar un valor predeterminado.

9.5 y mayores:

Según la pregunta, puede hacerlo con una función plpgsql que usa un controlador BEGIN ... EXCEPTION , si no le importa el impacto en el rendimiento y la torpeza. Pero no hay soporte incorporado.