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:
| Contesto | Chi può modificarlo | Quando entra in vigore |
|---|---|---|
user |
Qualsiasi utente | Immediatamente. Un utente normale può modificarlo solo per la propria sessione; un superuser può cambiarlo globalmente, rendendolo il default per tutti. |
superuser |
Solo il superuser | Al prossimo reload. La modifica si applica a tutti gli utenti e non può essere sovrascritta a livello di sessione. |
postmaster |
Chiunque modifichi il file | Solo dopo un restart completo del servizio. |
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:
| Campo | Significato |
|---|---|
setting |
Il valore attivo nel momento della visualizzazione |
boot_val |
Il valore di default definito internamente da PostgreSQL |
reset_val |
Il valore che entrerebbe in vigore dopo un restart o reload |
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 = falsepuò comparire anche quando una modifica è stata scritta nel file ma non è ancora stata caricata dal server — ad esempio dopo unALTER SYSTEMeseguito prima delpg_reload_conf().

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();