- 19.1.1. Nombres y valores de los parámetros
- 19.1.2. Interacción de parámetros a través del archivo de configuración
- 19.1.3. Interacción de parámetros a través de SQL
- 19.1.4. Interacción de parámetros a través del Shell
- 19.1.5. Administrar el contenido del archivo de configuración
19.1.1. Nombres y valores de los parámetros
Todos los nombres de los parámetros no distinguen entre mayúsculas y minúsculas. Cada parámetro toma un valor de uno de cinco tipos: booleano, string, entero, punto flotante o enumerado (enumeración). El tipo determina la sintaxis para configurar el parámetro:
-
Booleano: Los valores se pueden escribir como
on
,off
,true
,false
,yes
,no
,1
,0
(todo no distingue entre mayúsculas y minúsculas) o cualquier inequívoco prefix de uno de estos. -
Cuerda: En general, incluya el valor entre comillas simples, duplicando las comillas simples dentro del valor. Sin embargo, las comillas generalmente se pueden omitir si el valor es un número o identificador simple. (Los valores que coinciden con una palabra clave SQL requieren comillas en algunos contextos).
-
Numérico (entero y punto flotante): Los parámetros numéricos se pueden especificar en los formatos enteros y de coma flotante habituales; los valores fraccionarios se redondean al número entero más cercano si el parámetro es de tipo entero. Los parámetros enteros aceptan adicionalmente entrada hexadecimal (comenzando con
0x
) y entrada octal (comenzando con0
), pero estos formatos no pueden tener una fracción. No utilice separadores de miles. No se requieren cotizaciones, excepto para la entrada hexadecimal. -
Numérico con unidad: Algunos parámetros numéricos tienen una unidad implícita, porque describen cantidades de memoria o tiempo. La unidad puede ser bytes, kilobytes, bloques (normalmente ocho kilobytes), milisegundos, segundos o minutos. Un valor numérico sin adornos para una de estas configuraciones utilizará la unidad predeterminada de la configuración, que se puede aprender de
pg_settings
.unit
. Para mayor comodidad, los ajustes se pueden dar con una unidad especificada explícitamente, por ejemplo'120 ms'
por un valor de tiempo, y se convertirán a la unidad real del parámetro. Tenga en cuenta que el valor debe escribirse como string (con comillas) para utilizar esta función. El nombre de la unidad distingue entre mayúsculas y minúsculas y puede haber espacios en blanco entre el valor numérico y la unidad.-
Las unidades de memoria válidas son
B
(bytes),kB
(kilobytes),MB
(megabytes),GB
(gigabytes) yTB
(terabytes). El multiplicador de unidades de memoria es 1024, no 1000. -
Las unidades de tiempo válidas son
us
(microsegundos),ms
(milisegundos),s
(segundos),min
(minutos),h
(horas) yd
(dias).
Si se especifica un valor fraccionario con una unidad, se redondeará a un múltiplo de la siguiente unidad más pequeña, si la hay. Por ejemplo,
30.1 GB
será convertido a30822 MB
no32319628902 B
. Si el parámetro es de tipo entero, se produce un redondeo final a entero después de cualquier conversión de unidades. -
-
Enumerado: Los parámetros de tipo enumerado se escriben de la misma forma que string parámetros, pero están restringidos a tener uno de un conjunto limitado de valores. Los valores permitidos para dicho parámetro se pueden encontrar en
pg_settings
.enumvals
. Los valores de los parámetros de enumeración no distinguen entre mayúsculas y minúsculas.
19.1.2. Interacción de parámetros a través del archivo de configuración
La forma más fundamental de establecer estos parámetros es editar el archivo postgresql.conf
, que normalmente se guarda en el directorio de datos. Se instala una copia predeterminada cuando se inicializa el directorio del clúster de la base de datos. Un ejemplo de cómo podría verse este archivo es:
# This is a comment log_connections = yes log_destination ='syslog' search_path ='"$user", public' shared_buffers =128MB
Se especifica un parámetro por línea. El signo igual entre nombre y valor es opcional. Los espacios en blanco son insignificantes (excepto dentro de un valor de parámetro entre comillas) y las líneas en blanco se ignoran. Marcas de almohadilla (#
) designar el resto de la línea como comentario. Los valores de los parámetros que no sean simples identificadores o números deben estar entre comillas simples. Para incrustar una comilla simple en un valor de parámetro, escriba dos comillas (preferido) o una comilla invertida. Si el archivo contiene varias entradas para el mismo parámetro, todas menos la última se ignoran.
Los parámetros establecidos de esta manera proporcionan valores predeterminados para el clúster. Las configuraciones que ven las sesiones activas serán estos valores a menos que se anulen. Las siguientes secciones describen formas en las que el administrador o el usuario pueden anular estos valores predeterminados.
El archivo de configuración se vuelve a leer cada vez que el proceso del servidor principal recibe una SIGHUP señal; esta señal se envía más fácilmente ejecutando pg_ctl reload
desde la línea de comando o llamando a la función SQL pg_reload_conf()
. El proceso del servidor principal también propaga esta señal a todos los procesos del servidor en ejecución, de modo que las sesiones existentes también adopten los nuevos valores (esto sucederá después de que completen cualquier comando del cliente que se esté ejecutando actualmente). Alternativamente, puede enviar la señal a un único proceso de servidor directamente. Algunos parámetros solo se pueden configurar al iniciar el servidor; cualquier cambio en sus entradas en el archivo de configuración se ignorará hasta que se reinicie el servidor. Los ajustes de parámetros no válidos en el archivo de configuración también se ignoran (pero se registran) durante SIGHUP Procesando.
Además de postgresql.conf
, un directorio de datos de PostgreSQL contiene un archivo postgresql.auto.conf
, que tiene el mismo formato que postgresql.conf
pero está diseñado para editarse automáticamente, no manualmente. Este archivo contiene la configuración proporcionada a través del comando ALTER SYSTEM. Este archivo se lee siempre que postgresql.conf
es, y su configuración tiene efecto de la misma manera. Configuración en postgresql.auto.conf
anular los de postgresql.conf
.
Las herramientas externas también pueden modificar postgresql.auto.conf
. No se recomienda hacer esto mientras el servidor está en ejecución, ya que un ALTER SYSTEM
comando podría sobrescribir tales cambios. Dichas herramientas pueden simplemente agregar nuevas configuraciones al final, o pueden optar por eliminar configuraciones y / o comentarios duplicados (como ALTER SYSTEM
voluntad).
La vista del sistema pg_file_settings
puede ser útil para probar previamente los cambios en los archivos de configuración o para diagnosticar problemas si SIGHUP la señal no tuvo los efectos deseados.
19.1.3. Interacción de parámetros a través de SQL
PostgreSQL proporciona tres comandos SQL para establecer valores predeterminados de configuración. El comando ALTER SYSTEM ya mencionado proporciona un medio accesible a SQL para cambiar los valores predeterminados globales; es funcionalmente equivalente a editar postgresql.conf
. Además, hay dos comandos que permiten la configuración de valores predeterminados por base de datos o por función:
-
El comando ALTER DATABASE permite anular la configuración global por base de datos.
-
El comando ALTER ROLE permite anular la configuración global y por base de datos con valores específicos del usuario.
Valores establecidos con ALTER DATABASE
y ALTER ROLE
se aplican solo al iniciar una nueva sesión de base de datos. Anulan los valores obtenidos de los archivos de configuración o de la línea de comandos del servidor y constituyen valores predeterminados para el resto de la sesión. Tenga en cuenta que algunas configuraciones no se pueden cambiar después del inicio del servidor y, por lo tanto, no se pueden configurar con estos comandos (o los que se enumeran a continuación).
Una vez que un cliente está conectado a la base de datos, PostgreSQL proporciona dos comandos SQL adicionales (y funciones equivalentes) para interactuar con la configuración de la sesión local:
-
El comando SHOW permite la inspección del valor actual de cualquier parámetro. La función SQL correspondiente es
current_setting(setting_name text)
(consulte la Sección 9.27.1). -
El comando SET permite la modificación del valor actual de esos parámetros que se pueden configurar localmente en una sesión; no tiene ningún efecto en otras sesiones. La función SQL correspondiente es
set_config(setting_name, new_value, is_local)
(consulte la Sección 9.27.1).
Además, la vista del sistema pg_settings
se puede utilizar para ver y cambiar los valores locales de la sesión:
-
Consultar esta vista es similar a usar
SHOW ALL
pero proporciona más detalles. También es más flexible, ya que es posible especificar condiciones de filtro o unir contra otras relaciones. -
Usando ACTUALIZAR en esta vista, específicamente actualizando el
setting
columna, es el equivalente a emitirSET
comandos. Por ejemplo, el equivalente deSET configuration_parameter TODEFAULT;
es:
UPDATE pg_settings SET setting = reset_val WHERE name ='configuration_parameter';
19.1.4. Interacción de parámetros a través del Shell
Además de establecer valores predeterminados globales o adjuntar anulaciones en la base de datos o el nivel de rol, puede pasar la configuración a PostgreSQL a través de las funciones de shell. Tanto el servidor como la biblioteca cliente libpq aceptan valores de parámetros a través del shell.
-
Durante el inicio del servidor, la configuración de los parámetros se puede pasar al
postgres
comando a través del-c
parámetro de línea de comandos. Por ejemplo,postgres -c log_connections=yes -c log_destination='syslog'
Los ajustes proporcionados de esta manera anulan los establecidos a través de
postgresql.conf
oALTER SYSTEM
, por lo que no se pueden cambiar globalmente sin reiniciar el servidor. -
Al iniciar una sesión de cliente a través de libpq, la configuración de los parámetros se puede especificar usando el
PGOPTIONS
Variable ambiental. Los ajustes establecidos de esta manera constituyen valores predeterminados durante la duración de la sesión, pero no afectan a otras sesiones. Por razones históricas, el formato dePGOPTIONS
es similar al que se utiliza al iniciar elpostgres
mando; específicamente, el-c
se debe especificar la bandera. Por ejemplo,env PGOPTIONS="-c geqo=off -c statement_timeout=5min" psql
Otros clientes y bibliotecas pueden proporcionar sus propios mecanismos, a través del shell o de otro modo, que permiten al usuario modificar la configuración de la sesión sin el uso directo de comandos SQL.
19.1.5. Administrar el contenido del archivo de configuración
PostgreSQL proporciona varias funciones para analizar complejos postgresql.conf
archivos en subarchivos. Estas funciones son especialmente útiles cuando se administran varios servidores con configuraciones relacionadas, pero no idénticas.
Además de los ajustes de parámetros individuales, el postgresql.conf
el archivo puede contener incluir directivas, que especifica otro archivo para leer y procesar como si estuviera insertado en el archivo de configuración en este punto. Esta función permite dividir un archivo de configuración en partes físicamente separadas. Incluir directivas simplemente se ve así:
include 'filename'
Si el nombre del archivo no es una ruta absoluta, se considera relativo al directorio que contiene el archivo de configuración de referencia. Las inclusiones se pueden anidar.
También hay un include_if_exists
directiva, que actúa igual que la include
directiva, excepto cuando el archivo referenciado no existe o no se puede leer. Un habitual include
considerará esto como una condición de error, pero include_if_exists
simplemente registra un mensaje y continúa procesando el archivo de configuración de referencia.
los postgresql.conf
el archivo también puede contener include_dir
directivas, que especifican un directorio completo de archivos de configuración para incluir. Estos parecen
include_dir 'directory'
Los nombres de directorio no absolutos se toman como relativos al directorio que contiene el archivo de configuración de referencia. Dentro del directorio especificado, solo los archivos que no son de directorio cuyos nombres terminan con el sufijo .conf
Será incluido. Los nombres de archivo que comienzan con .
Los caracteres también se ignoran, para evitar errores, ya que dichos archivos están ocultos en algunas plataformas. Varios archivos dentro de un directorio de inclusión se procesan en orden de nombre de archivo (de acuerdo con las reglas de configuración regional de C, es decir, números antes de letras y letras mayúsculas antes de minúsculas).
Incluir archivos o directorios se puede utilizar para separar lógicamente porciones de la configuración de la base de datos, en lugar de tener una única gran postgresql.conf
expediente. Considere una empresa que tiene dos servidores de base de datos, cada uno con una cantidad de memoria diferente. Es probable que ambos compartan elementos de la configuración, por ejemplo, el registro. Pero los parámetros relacionados con la memoria en el servidor variarán entre los dos. Y también puede haber personalizaciones específicas del servidor. Una forma de gestionar esta situación es dividir los cambios de configuración personalizados para su sitio en tres archivos. Podrías agregar esto al final de tu postgresql.conf
archivo para incluirlos:
include 'shared.conf' include 'memory.conf' include 'server.conf'
Todos los sistemas tendrían el mismo shared.conf
. Cada servidor con una cantidad particular de memoria podría compartir la misma memory.conf
; es posible que tenga uno para todos los servidores con 8 GB de RAM, otro para los que tienen 16 GB. Y finalmente server.conf
podría tener información de configuración verdaderamente específica del servidor.
Otra posibilidad es crear un directorio de archivos de configuración y poner esta información en archivos allí. Por ejemplo, un conf.d
se puede hacer referencia al directorio al final de postgresql.conf
:
include_dir 'conf.d'
Entonces podrías nombrar los archivos en el conf.d
directorio como este:
00shared.conf 01memory.conf 02server.conf
Esta convención de nomenclatura establece un orden claro en el que se cargarán estos archivos. Esto es importante porque solo se utilizará la última configuración encontrada para un parámetro en particular mientras el servidor está leyendo archivos de configuración. En este ejemplo, algo establecido en conf.d/02server.conf
anularía un valor establecido en conf.d/01memory.conf
.
En su lugar, puede utilizar este enfoque para nombrar los archivos de forma descriptiva:
00shared.conf 01memory-8GB.conf 02server-foo.conf
Este tipo de disposición le da un nombre único a cada variación del archivo de configuración. Esto puede ayudar a eliminar la ambigüedad cuando varios servidores tienen todas sus configuraciones almacenadas en un solo lugar, como en un repositorio de control de versiones. (Almacenar los archivos de configuración de la base de datos bajo el control de versiones es otra buena práctica a considerar).
Anterior | Hasta | próximo |
Capítulo 19. Configuración del servidor | Hogar | 19.2. Ubicaciones de archivos |
valoraciones y reseñas
Al final de la web puedes encontrar las referencias de otros creadores, tú de igual manera eres capaz dejar el tuyo si te apetece.