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 con 0), 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) y TB (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) y d (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 a 30822 MB no 32319628902 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 emitir SET comandos. Por ejemplo, el equivalente de

    SET 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 o ALTER 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 de PGOPTIONS es similar al que se utiliza al iniciar el postgres 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