Salta el contingut
 

Paràmetres de configuració

Joan Puigcerver Ibáñez

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

Paràmetres de configuració de PostgreSQL

Els paràmetres de configuració del servidor defineixen el comportament de la instància de PostgreSQL (el clúster). Es classifiquen segons el seu context, que determina quan i com es poden modificar:

Context Significat Com s'aplica Exemples
internal Només lectura. Fixat en compilar PostgreSQL o en crear el clúster (initdb). No es pot modificar. block_size, server_version, data_checksums
postmaster Estàtic. Es llig només en iniciar el servidor. Editar la configuració i reiniciar el servidor. shared_buffers, max_connections, port, listen_addresses
sighup Es llig en rebre el senyal SIGHUP. Editar la configuració i recarregar (pg_ctl reload o SELECT pg_reload_conf()). log_min_duration_statement, checkpoint_timeout, max_wal_size
superuser-backend Només s'aplica en iniciar una connexió, i només pot fixar-lo un superusuari. Només afecta a noves connexions. ignore_system_indexes
backend Només s'aplica en iniciar una connexió. Només afecta a noves connexions. No es pot canviar amb SET. log_connections
superuser Dinàmic. Es pot modificar en la sessió, només un superusuari. SET, o recarregar la configuració. log_statement, lc_messages
user Dinàmic. Qualsevol usuari pot modificar-lo en la sessió. SET, o recarregar la configuració. work_mem, search_path, statement_timeout

El context de cada paràmetre es pot consultar a la vista pg_settings (vegeu Consulta de paràmetres).

Fitxer postgresql.conf

La configuració de la instància es gestiona mitjançant el fitxer postgresql.conf, situat al directori de dades (PGDATA), que es llig en iniciar el servidor.

Es pot consultar la ubicació del fitxer en ús amb:

SHOW config_file;
                config_file
-----------------------------------------
 /var/lib/postgresql/data/postgresql.conf

Consulta de paràmetres

Els paràmetres de configuració es poden consultar de diverses maneres:

  • Amb SHOW, per a consultar un paràmetre concret o tots:

    SHOW work_mem;
    SHOW ALL;
    
  • Amb consultes SQL sobre la vista de catàleg pg_settings, que ofereix més detall (valor per defecte, context, si requereix reinici, etc.):

    ud1/parameters.sql
    SELECT name, setting, unit, context, source
    FROM pg_settings
    WHERE name IN ('work_mem', 'datestyle', 'lc_time', 'shared_buffers', 'max_connections');
    

Modificació de paràmetres

Un paràmetre es pot modificar només per a la sessió actual o per a tot el servidor. El primer cas és útil per fer proves, ja que el canvi desapareix en tancar la connexió:

  • A nivell de sessió, amb SET:

    SET work_mem = '64MB';
    SET datestyle = 'ISO, DMY';
    

    El valor original de la sessió es recupera amb RESET:

    RESET work_mem;
    
  • A nivell de sistema, amb ALTER SYSTEM (disponible des de PostgreSQL 9.4), que escriu el nou valor a un fitxer addicional postgresql.auto.conf, sense modificar directament postgresql.conf:

    ALTER SYSTEM SET work_mem = '64MB';
    SELECT pg_reload_conf();
    

    ALTER SYSTEM no aplica el canvi immediatament.

    Cal recarregar la configuració (sighup) o reiniciar el servidor (postmaster), segons el context del paràmetre modificat.

    Per eliminar un valor establert amb ALTER SYSTEM (tornar al valor de postgresql.conf):

    ALTER SYSTEM RESET work_mem;
    

Documentació oficial de PostgreSQL

Exercici: canvi de paràmetres
Paràmetre Valor
datestyle ISO, DMY
TimeZone Europe/Madrid
work_mem 64MB
statement_timeout 30000 (ms)
  1. Modifica els paràmetres anteriors a nivell de sessió amb SET.
  2. Comprova els canvis amb SHOW ALL o consultant pg_settings.
  3. Modifica els mateixos paràmetres a nivell de sistema amb ALTER SYSTEM, de manera permanent.
  4. Recarrega la configuració i comprova els canvis amb una nova sessió.
Solució
SET datestyle = 'ISO, DMY';
SET TimeZone = 'Europe/Madrid';
SET work_mem = '64MB';
SET statement_timeout = 30000;

SHOW ALL;

ALTER SYSTEM SET datestyle = 'ISO, DMY';
ALTER SYSTEM SET TimeZone = 'Europe/Madrid';
ALTER SYSTEM SET work_mem = '64MB';
ALTER SYSTEM SET statement_timeout = 30000;

SELECT pg_reload_conf();

-- Amb una nova connexió:
SELECT name, setting FROM pg_settings
WHERE name IN ('datestyle', 'timezone', 'work_mem', 'statement_timeout');
Exercici: canvi d'idioma
  • Consulta el paràmetre lc_time, relacionat amb l'idioma dels noms de mesos i dies de la setmana.
  • Mostra el mes actual amb l'idioma per defecte:

    SELECT to_char(current_date, 'TMMonth') AS mes;
    
  • Assigna la variable de sessió lc_time a l'alemany (de_DE.UTF-8, si està disponible al servidor) i torna a mostrar el mes actual.

    lc_time requereix que el locale estiga instal·lat al sistema operatiu del servidor.

  • Torna a deixar el valor per defecte i comprova que el mes torna a mostrar-se en l'idioma original.

📌 Aquest document pot quedar desactualitzat després d’imprimir-lo. Pots consultar la versió més recent a la pàgina web.
🌿 Abans d’imprimir aquest document, considera si és realment necessari. Redueix el consum de paper i ajuda a protegir el nostre entorn.