Tema SQL
set_config() (PostgreSQL)
Establece un parámetro de sesión o transacción en tiempo de ejecución y devuelve texto con el valor aplicado. Equivalente conceptual a SET nombre = valor con retorno utilizable en expresiones.
Descripción
set_config(setting, new_value, is_local) con is_local true limita el cambio a la transacción actual (rollback restaura); false aplica a sesión. Útil en scripts dinámicos, pruebas de search_path y aislamiento temporal de configuración sin alterar postgresql.conf. No sustituye privilegios: muchos parámetros solo los cambia superusuario o el rol con permiso. Comparar con current_setting para leer. En aplicaciones pool (PgBouncer) el contexto de sesión puede resetearse entre sentencias: documenta el comportamiento del pooler.
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
set_config(nombre, valor, es_solo_transaccion)
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- is_local
- true = válido hasta fin de transacción; false = sesión.
- search_path
- Patrón frecuente para fijar esquema en migraciones o tests.
- Seguridad
- No expongas set_config arbitrario desde SQL inyectado en aplicaciones.
Ejemplos
Ejemplo 1
SELECT set_config('search_path', 'public, app', false);
BEGIN;
SELECT set_config('app.jwt_claims', '{"role":"admin"}', true);
-- COMMIT revierte el parámetro local
COMMIT;
Ejemplo 2
SELECT set_config('statement_timeout', '5s', false);
-- límite de sesión; revertir según política
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.