SET — cambia un parámetro de configuración en tiempo de ejecución
SET [ SESSION | LOCAL ]configuration_parameter{ TO | = } {value| 'value' | DEFAULT } SET [ SESSION | LOCAL ] TIME ZONE {value| 'value' | LOCAL | DEFAULT }
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.
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.
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_parameterNombre 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:
SCHEMASET SCHEMA ' es un alias de
value'SET search_path TO . Solo se puede especificar un esquema
usando esta sintaxis.
value
NAMESSET NAMES ' es un alias de
value'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 ZONESET TIME ZONE ' es un alias de
value'SET timezone TO '. La sintaxis value'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.
-7La zona horaria 7 horas al oeste de UTC (equivalente a PDT). Los valores positivos son al este de UTC.
INTERVAL '-08:00' HOUR TO MINUTELa zona horaria 8 horas al oeste de UTC (equivalente a PST).
LOCALDEFAULT
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.
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.
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';
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.