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.