Installare questo ottimo database relazionale non è un problema utilizzando fink. E’ sufficiente verificare quale versione di postgres sia disponibile con:
fink list |grep postgres
Mentre sto scrivendo risulta disponibilie una versione chiamata postgresql80 (cioè Postgresql 8.0). Per installarla:
fink install postgresql80
A questo punto dovrebbe essere sufficiente eseguire il seguente comando per avviare il database:
sudo /sw/bin/pgsql.sh-8.0 start
Il comando funziona ma viene dato un warning
WARNING: You probably need to set your shared
memory resources higher for PostgreSQL to function.
e nei log compare un messaggio ancora più esplicito:
FATAL: could not create shared memory
segment: Cannot allocate memory
DETAIL: Failed system call was shmget
(key=5432001, size=3768320, 03600).
Ho avuto problemi simili in passato su OpenBSD, che è configurato con limiti molto bassi sulla massima quantità di memoria condivisa che un processo può allocare. Mac OS X, che è della famiglia BSD, ha lo stesso problema.
Il messaggio di errore dice che il database sta cercando di allocare 3768320 byte di memoria condivisa ma non ci riesce. Il comando per verificare i limiti del sistema è il seguente:
sysctl -a |grep shm
kern.sysv.shmmax: 4194304
kern.sysv.shmmin: 1
kern.sysv.shmmni: 32
kern.sysv.shmseg: 8
kern.sysv.shmall: 1024
Una pagina della documentazione di Postgres spiega a cosa servono tutti questi valori.
I valori che possono causare problemi sono kern.sysv.shmmax (la dimensione massima di un blocco di memoria condivisa) kern.sysv.shmmni (il numero massimo di blocchi di memoria condivisa che il sistema può concedere) e in kern.sysv.shmall (la dimensione, in pagine da 4096 byte, massima totale della memoria condivisa fra tutti i blocchi concessi).
Dopo un po’ di sperimentazione scopro che il primo dei tre valori non è un problema al momento (4194304 byte di dimensione massima è maggiore dei 3768320 byte richiesti) ma può diventare un problema in futuro: meglio aumentarlo. Gli altri due valori sono invece troppo bassi e vanno assolutamente aumentati.
La soluzione è creare o modificare il file /etc/sysctl.conf in modo che contenga le seguenti righe:
kern.sysv.shmmax=16777216
kern.sysv.shmmin=1
kern.sysv.shmmni=64
kern.sysv.shmseg=8
kern.sysv.shmall=65536
Questi valori dovrebbero andare bene per qualunque sistema, purché la memoria fisica sia superiore a 256MB.
Una volta salvato il file con le configurazioni è necessario riavviare la macchina. A questo punto postgres dovrebbe partire senza problemi.