SET

Nombre

SET  --  Fija parámetros de tiempo de ejecución para la sesión.

Synopsis

SET variable { TO | = } { 'value' | DEFAULT }
SET TIME ZONE { 'timezone' | LOCAL | DEFAULT }
SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE }
  

Inputs (Valores de entrada)

variable

Parámetro glogal que se quiere fijar.

value

Nuevo valor del parámetro. Se puede utilizar el valor DEFAULT para especificar que se devuelve el parámetro a su valor de defecto.

Las variables posibles y los valores permitidos son:

CLIENT_ENCODING | NAMES

Fija la codificación para clientes mult-byte. Los parámetros son:

value

Fija la codificación de cliente multi-byte a: value. La codificación especificada debe estar soportada por el servidor.

Esta opción solo es utilizable si el soporte MULTIBYE se autorizó durante el paso de configuración en la construcción de Postgres.

DateStyle

Fija el estilo de representación de fecha/hora. Afecta al formato de salida, y en algunos casos puede afectar a la interpretación de la entrada.

ISO

utiliza fechas y horas de estilo ISO 8601.

SQL

utiliza fechas y horas de estilo Oracle/Ingres.

Postgres

utiliza el formato tradicional de Postgres.

European

utiliza dd/mm/yyyy para la representación numérica de las fechas.

NonEuropean

utiliza mm/dd/yyyy para la representación numérica de las fechas.

German

utiliza dd.mm.yyyy para la representación numérica de las fechas.

US

igual que 'NonEuropean'

DEFAULT

recupera los valores de defecto ('US,Postgres')

La inicialización del formato de la fecha se puede hacer:

Fijando la variable de entorno PGDATESTYLE. Si PGDATESTYLE se fija en el ambiente de una aplicación de un cliente basado en libpq, libpq fijará automáticamente DATESTYLE al valor de PGDATESTYLE durante el arranque de la conexión.
Ejecutando postmastes utilizando la opción -o -e se fijan las fechas a la convención Europea. Nótese que esto afecta sólo a algunas combinaciones de estilos de fechas; por ejemplo, el estily ISO no se ve afectado por este parámetro.
Cambiando las variables en src/backend/utils/init/globals.c.

Las variables de globals.c que se pueden cambiar son:

bool EuroDates = false | true
int DateStyle = USE_ISO_DATES | USE_POSTGRES_DATES | USE_SQL_DATES | USE_GERMAN_DATES

SERVER_ENCODING

Fija la codificación multi-byte para el servidor.

value

Fija la codificación multi-bye para el servidor.

Esta opción sólo está disponible si se habilitó el soporte MULTIBYTE durante el paso de configuración de la construcción de Postgres.

TIMEZONE

Los valores posibles para timezone dependen de su sistema operativo. Por ejemplo, en Linux /usr/lib/zoneinfo contiene la base de datos de zonas horarias.

Aquí tiene algunos valores válidos para zonas horarias:

'PST8PDT'

situa la zona horaria de California.

'Portugal'

sitúa la zona horaria de Portugal.

'Europe/Rome'

sitúa la zona horaria de Italia.

DEFAULT

fija la zona horaria a su valor local. (el valor de la variable de entorno TZ).

Si se especifica una zona horaria invalida, será fijada a GMT (en la mayoría de sistemas en cualquier caso).

La segunda sistaxis mostrada más arriba, permite fijar la zona horaria con una sintaxis similar a SET TIME ZONE de SQL92. La palabra clave LOCAL es sólo un formato alternativo a DEFAULT para mantener la compatibilidad con SQL92.

Si la variable de entorno PGTZ se fija en el ambiente de la aplicación de un cliente basado en libpq (en el ambiente del frontend), libpq fijará automáticamente TIMEZONE al valor de PGTZ durante el arranque de la conexión.

TRANSACTION ISOLATION LEVEL

Fija el nivel de aislamiento para la transacción actual.

READ COMMITTED

Las consultas de la transacción actual leen sólo filas aseguradas (committed) antes de empezar una consulta. READ COMMITTED es el valor de defecto.

Nota: El estandar SQL92 requiere que se fije el valor de aislamiento de defecto a SERIALIZABLE.

SERIALIZABLE

Las consultas de la transacción llen sólo fila aseguradas antes de la primera instrucción DML (SELECT/INSERT/DELETE/UPDATE/FETCH/COPY_TO) que se ejecute en esta transacción.

Hay también varios parámetros internos o de optimización que se pueden especificar con el comando SET:

RANDOM_PAGE_COST

Fija la estimación del optimizador del coste de una página de disco leída no secuencialmente. Eso se mide como un múltiplo del coste de una lectura de página secuencial.

float8

Fija el coste de un acceso aleatorio a un página al valor punto flotante especificado.

CPU_TUPLE_COST

Fija la estimación que hará el optimizador del coste de procesar cada tupla durante una consulta. Esto se mide como una fracción del coste de una lectura secuencial de una página.

float8

Fija el coste de proceso de CPU por tupla al valor de de punto flotante especificado.

CPU_INDEX_TUPLE_COST

Fija la estimación que hará el optimizador sobre el coste de procesar cada tupla del índice durante el procesado de un barrido del índice (index scan). Se mide como una fracción del coste de una lectura secuencial de página.

float8

Fija el coste de CPU de procesado por tupla de índice al valor de punto flotante especificado.

CPU_OPERATOR_COST

Fija la estimación que hará el optimizador del coste de procesar cada operador en una cláusula WHERE. Esto se mide como una fracción del coste de un acceso secuencial a una página.

float8

Fija le coste de CPU para procesar cada operador al valor de punto flotante especificado.

EFFECTIVE_CACHE_SIZE

Fija la estimación que hará el optimizador sobre el tamaño efectivo de la caché en disco (es decir, la porción de la caché en disco del kernel que será utilizada por los ficheros de datos de Postgres). Esto se mide en páginas de disco, normalmente en piezas de 8 Kb.

float8

Fija el tamaño estimado de la caché en el valor de punto flotante especificado.

ENABLE_SEQSCAN

Habilita o inhabilita el uso por el planificador de tipos de planes de barrido secuencial. (No es posible suprimir completamente los barridos secuenciales, pero desactivando esta variable se disuade al planificador de utilizar uno de ellos si dispone de otro método utilizable).

ON

Habilita el uso de barridos secuenciales (valor de defecto).

OFF

Inhabilita el uso de barridos secuenciales.

ENABLE_INDEXSCAN

Habilita o inhabilita el uso por el planificador de tipos de planes de barrido de índices.

ON

Habilita el uso de barridos de índices (valor de defecto).

OFF

Inhabilita el uso de barridos de índices.

ENABLE_TIDSCAN

Habilita o inhabilita el uso por el planificador de tipos tipos de planes por barrido TID.

ON

Habilita el uso de barridos TID (valor de defecto).

OFF

Inhabilita el uso de barridos TID.

ENABLE_SORT

Habilita o inhabilita el uso por el planificador pasos de ordenación explícita. (No es posible suprimir por completo las ordenaciones explititas, pero fijando en OFF esta variable disuade al planificador de usar uno cuando tiene otro método utilizable.)

ON

Habilita el uso de ordenaciones (valor de defecto).

OFF

Inhabilita el uso de ordenaciones.

ENABLE_NESTLOOP

Habilita o inhabilita el uso por el planificador de planes de join de blucle anidado. (No es posible suprimer por completo las joins de bucle anidado, pero fijar en OFF esta variable disuade al planificador de utilizar uno de ellos si dispone de otro método).

ON

Habilita el uso de joins de bucle anidado (valor de defecto).

OFF

Inshabilita el uso de joins de bucle anidado.

ENABLE_MERGEJOIN

Habilita o inhabilita el uso por el planificador de planes de tipo "enlace intercalado" (mergejoin).

ON

Habilita el uso de enlaces intercalados (valor de defecto).

OFF

Inhabilita el uso de enlaces intercalados.

ENABLE_HASHJOIN

Habilita o inhabilita el uso por el planificador de planes de tipo enlace hash (hashjoin).

ON

Habilita el uso de enlaces hash (valor de defecto).

OFF

Inhabilita el uso de enlaces hash.

GEQO

Fija el porcentaje de uso del algoritmo genérico del optimizador.

ON

Habilita el algoritmo genérico del optimizador para instrucciones con 11 tablas o más. (Este es también el valor de defecto DEFAULT).

ON=#

Toma un argumento entero para habilitar el algoritmo genérico para instrucciones con # o más tablas en la consulta.

OFF

Inhabilita el algoritmo genérico del optimizador.

Vea el capítulo sobre GEQO de la Guía del Programador para obtener más información sobre la optimización de la consulta.

Si la variable de entorno PGGEQO se fija en el ambiente de usuario de un cliente basado en libpq, libpq automáticamente fijará GEQO al valor de PGGEQO durante el arranque de la conexión.

KSQO

Key Set Query Optimizer (Optimizador de la Consulta Fijado por Clave) lleva al planificador de la consulta a convertir aquellas consultas cuyas cláusulas WHERE incluyan muchas cláusulas OR y AND (tales como "WHERE (a=1 AND b=2) OR (a=2 AND b=3) ...") en una consulta UNION. Este metodo puede ser más rápido que la implementación de defecto, pero no necesariamente produce exactamente el mismo resultado, puesto que UNION implítitamente añade una cláusula SELECT DISTINCT para eliminar las filas resultantes que sean identicas. KSQO se utiliza habitualmente cuando se trabaja con productos como MicroSoft Access, que tienden a generar las consultas de esta forma.

ON

Habilita esta optimización.

OFF

Inhabilita esta optimización (valor de defecto).

DEFAULT

Equivalente a especificar SET KSQO='OFF'.

El algoritmo KSQO se utilizaba por ser absolutamente esencial para consultas con muchas cláusulas OR y AND, pero en Postgres 7.0 y posteriores, el planificador estandar manipula estas consultas correctamente.

Outputs

SET VARIABLE

Mensaje devuelto si se fija el valor con éxito.

WARN: Bad value for variable (value)

Si el comando falla al fijar el valor especificado.

Descripción

SET modificará los parámetros de configuración para la variable durante una sesión.

Los valores en vigor se pueden obtener utilizando el SHOW, y los valores pueden devolverse a su situación de defecto utilizando RESET. Valores y parámetros son sensibles a mayúsculas y minúsculas. Nótese que el campo "valor" siempre se especifica como una cadena de caracteres, de modo que se encierra entre comillas simples.

SET TIME ZONE cambia la asignación de zona horaria de defecto de la sesión. Una sesión SQL siempre empieza con un valor inicial de asignación de zona horaria. La instrucción SET TIME ZONE se utiliza para cambiar la asignación de zona horaria para la sesión SQL actual.

Notas

La instrucción SET variable es una extensión del lenguaje de Postgres.

Refierase a SHOW y RESET para mostrar o inicializar los valores actuales.

Uso

Fijar el estilo de la fecha a ISO:

SET DATESTYLE TO 'ISO';
   
Habilitar GEQO para consultas con 4 o más tablas:
 
SET GEQO ON=4;
   
Fijar GEQO a su valor de defecto:
 
SET GEQO = DEFAULT;
   
Fijar la zona horaria a Berkeley, California:
 
SET TIME ZONE 'PST8PDT';
SELECT CURRENT_TIMESTAMP AS ahora;
   
   ahora
   ----------------------
   1998-03-31 07:41:21-08
   
Fijar la zona horaria para Italia:
 
SET TIME ZONE 'Europe/Rome';
SELECT CURRENT_TIMESTAMP AS ahora;
   
   ahora
   ----------------------
   1998-03-31 17:41:31+02
   

Compatibilidad

SQL92

No hay SET variable general en SQL92 (con la excepción de SET TRANSACTION ISOLATION LEVEL). La sintaxis de SQL92 para SET TIME ZONE es ligeramente diferente, que permite sólo un único valor entero para la especificación de la zona horaria:

SET TIME ZONE { expresión_de_valor_del_intervalo | LOCAL }