postgresql.conf è il principale file di configurazione di PostgreSQL Server. Contiene decine di parametri che controllano praticamente ogni aspetto del comportamento del server: quanta memoria allocare, quali connessioni accettare e con quale metodo autenticarle, su quale porta restare in ascolto, quante connessioni concorrenti permettere, dove scrivere i log.

Ad ogni avvio, PostgreSQL legge questo file e carica tutte le impostazioni definite al suo interno.

Leggere la configurazione attiva

Per visualizzare le impostazioni attive senza aprire fisicamente il file, puoi interrogare la vista pg_settings:

SELECT
    name,
    context,
    unit,
    setting,
    boot_val,
    reset_val
FROM pg_settings
ORDER BY context, name;

Il campo context indica chi può modificare un parametro e quando la modifica diventa effettiva:

Il campo unit rappresenta l'unità di misura del parametro (es. MB, ms, kB).

I campi setting, boot_val e reset_val mostrano i valori del parametro nei diversi momenti del ciclo di vita del server:

Vedere da dove arrivano le impostazioni

pg_file_settings è una vista complementare a pg_settings: invece di mostrare i valori attivi in memoria, legge direttamente i file di configurazione e indica per ogni parametro il file sorgente e il numero di riga da cui proviene.

SELECT name, sourcefile, sourceline, setting, applied
FROM pg_file_settings
ORDER BY name;

La colonna applied indica se il valore è quello effettivamente attivo nel server. Il caso più interessante è quando lo stesso parametro compare in entrambi i file con valori diversi: postgresql.auto.conf ha sempre la precedenza, quindi vedrai due righe per lo stesso parametro — una con applied = true (quella di auto.conf) e una con applied = false (quella di postgresql.conf, ignorata).

Nota: applied = false può comparire anche quando una modifica è stata scritta nel file ma non è ancora stata caricata dal server — ad esempio dopo un ALTER SYSTEM eseguito prima del pg_reload_conf().

Applied pg_file_settings - PostgreSQL

Modificare le impostazioni

Per modificare un parametro senza toccare manualmente i file di configurazione, si usa il comando ALTER SYSTEM:

-- Un utente normale può fare questo, vale solo per lui finché tiene aperta la sessione
SET work_mem = '256MB';

-- Il superuser può farlo valere per tutti (dopo reload)
ALTER SYSTEM SET work_mem = '128MB';

ALTER SYSTEM non modifica postgresql.conf, ma scrive la modifica in postgresql.auto.conf, un file introdotto in PostgreSQL 9.4 pensato proprio per questo scopo. In questo modo le modifiche manuali al file principale e quelle applicate via SQL restano separate e tracciabili.

Per rendere effettiva la modifica senza riavviare il server (quando il parametro lo consente), è sufficiente eseguire:

SELECT pg_reload_conf();