SET

SET — cambia un parámetro de configuración en tiempo de ejecución

Synopsis

SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value | 'value' | DEFAULT }
SET [ SESSION | LOCAL ] TIME ZONE { value | 'value' | LOCAL | DEFAULT }

Descripción

El comando SET cambia los parámetros de configuración en tiempo de ejecución. Muchos de los parámetros de configuración listados en Chapter 19 se pueden cambiar dinámicamente con SET. (Algunos parámetros solo pueden ser cambiados por superusuarios y usuarios a los que se les ha otorgado el privilegio SET sobre ese parámetro. También hay parámetros que no se pueden cambiar después del inicio del servidor o de la sesión). SET solo afecta al valor utilizado por la sesión actual.

Si se emite SET (o equivalentemente SET SESSION) dentro de una transacción que luego se aborta, los efectos del comando SET desaparecen cuando se revierte la transacción. Una vez que se confirma la transacción contenedora, los efectos persistirán hasta el final de la sesión, a menos que sean anulados por otro SET.

Los efectos de SET LOCAL duran solo hasta el final de la transacción actual, ya sea que se confirme o no. Un caso especial es SET seguido de SET LOCAL dentro de una sola transacción: el valor de SET LOCAL se verá hasta el final de la transacción, pero después (si la transacción se confirma) el valor de SET tendrá efecto.

Los efectos de SET o SET LOCAL también se cancelan al revertir a un punto de salvaguarda («savepoint») anterior al comando.

Si se usa SET LOCAL dentro de una función que tiene una opción SET para la misma variable (consulta CREATE FUNCTION), los efectos del comando SET LOCAL desaparecen al salir de la función; es decir, se restablece el valor que estaba en vigor cuando se llamó a la función. Esto permite que SET LOCAL se utilice para cambios dinámicos o repetidos de un parámetro dentro de una función, manteniendo al mismo tiempo la comodidad de usar la opción SET para guardar y restablecer el valor del llamador. Sin embargo, un comando SET regular anula la opción SET de cualquier función contenedora; sus efectos persistirán a menos que se reviertan.

Note

En las versiones de PostgreSQL 8.0 a 8.2, los efectos de un SET LOCAL se cancelaban al liberar un punto de salvaguarda anterior o al salir con éxito de un bloque de excepción de PL/pgSQL. Este comportamiento se cambió porque se consideró poco intuitivo.

Parámetros

SESSION

Especifica que el comando surte efecto para la sesión actual. (Este es el valor predeterminado si no aparece ni SESSION ni LOCAL).

LOCAL

Especifica que el comando surte efecto solo para la transacción actual. Después de COMMIT o ROLLBACK, el ajuste a nivel de sesión vuelve a surtir efecto. Si se emite fuera de un bloque de transacción, emite una advertencia y de lo contrario no tiene efecto.

configuration_parameter

Nombre de un parámetro configurable en tiempo de ejecución. Los parámetros disponibles están documentados en la Chapter 19 y a continuación.

value

Nuevo valor del parámetro. Los valores se pueden especificar como constantes de cadena, identificadores, números o listas de estos separadas por comas, según corresponda para el parámetro en particular. Se puede escribir DEFAULT para especificar el restablecimiento del parámetro a su valor predeterminado (es decir, el valor que habría tenido si no se hubiera ejecutado ningún SET en la sesión actual).

Además de los parámetros de configuración documentados en la Chapter 19, hay algunos que solo se pueden ajustar utilizando el comando SET o que tienen una sintaxis especial:

SCHEMA

SET SCHEMA 'value' es un alias de SET search_path TO value. Solo se puede especificar un esquema usando esta sintaxis.

NAMES

SET NAMES 'value' es un alias de SET client_encoding TO value.

SEED

Establece la semilla interna para el generador de números aleatorios (la función random). Los valores permitidos son números de punto flotante entre -1 y 1 inclusive.

La semilla también se puede establecer invocando la función setseed:

SELECT setseed(value);
TIME ZONE

SET TIME ZONE 'value' es un alias de SET timezone TO 'value'. La sintaxis SET TIME ZONE permite una sintaxis especial para la especificación de la zona horaria. Aquí hay ejemplos de valores válidos:

'America/Los_Angeles'

La zona horaria de Berkeley, California.

'Europe/Rome'

La zona horaria de Italia.

-7

La zona horaria 7 horas al oeste de UTC (equivalente a PDT). Los valores positivos son al este de UTC.

INTERVAL '-08:00' HOUR TO MINUTE

La zona horaria 8 horas al oeste de UTC (equivalente a PST).

LOCAL
DEFAULT

Establece la zona horaria a tu zona horaria local (es decir, el valor predeterminado del servidor para timezone).

Las configuraciones de zona horaria dadas como números o intervalos se traducen internamente a la sintaxis de zona horaria POSIX. Por ejemplo, después de SET TIME ZONE -7, SHOW TIME ZONE reportaría <-07>+07.

Las abreviaturas de zona horaria no son compatibles con SET; consulta la Section 8.5.3 para obtener más información sobre las zonas horarias.

Notas

La función set_config proporciona una funcionalidad equivalente; consulta la Section 9.28.1. Además, es posible actualizar («UPDATE») la vista del sistema pg_settings para realizar el equivalente de SET.

Ejemplos

Establece la ruta de búsqueda de esquemas:

SET search_path TO my_schema, public;

Establece el estilo de fecha al tradicional de POSTGRES con la convención de entrada «día antes de mes» («day before month»):

SET datestyle TO postgres, dmy;

Establece la zona horaria para Berkeley, California:

SET TIME ZONE 'America/Los_Angeles';

Establece la zona horaria para Italia:

SET TIME ZONE 'Europe/Rome';

Compatibilidad

SET TIME ZONE extiende la sintaxis definida en el estándar SQL. El estándar permite solo desplazamientos de zona horaria numéricos, mientras que PostgreSQL permite especificaciones de zona horaria más flexibles. Todas las demás características de SET son extensiones de PostgreSQL.

Véase también

RESET, SHOW