Risolto... in parte.
Apparentemente, l'installazione delle ultime versioni di OS X (ad es. Yosemite o El Capitan) rimuove alcune directory in /usr/local/var/postgres
.
Per risolvere questo problema, ricrea semplicemente le directory mancanti:
mkdir -p /usr/local/var/postgres/pg_commit_ts
mkdir -p /usr/local/var/postgres/pg_dynshmem
mkdir -p /usr/local/var/postgres/pg_logical/mappings
mkdir -p /usr/local/var/postgres/pg_logical/snapshots
mkdir -p /usr/local/var/postgres/pg_replslot
mkdir -p /usr/local/var/postgres/pg_serial
mkdir -p /usr/local/var/postgres/pg_snapshots
mkdir -p /usr/local/var/postgres/pg_stat
mkdir -p /usr/local/var/postgres/pg_stat_tmp
mkdir -p /usr/local/var/postgres/pg_tblspc
mkdir -p /usr/local/var/postgres/pg_twophase
O, più concisamente (grazie a Nate ):
mkdir -p /usr/local/var/postgres/{{pg_commit_ts,pg_dynshmem,pg_replslot,pg_serial,pg_snapshots,pg_stat,pg_stat_tmp,pg_tblspc,pg_twophase},pg_logical/{mappings,snapshots}}
Riesecuzione di pg_ctl start -D /usr/local/var/postgres
ora avvia il server normalmente e, almeno per me, senza alcuna perdita di dati.
AGGIORNAMENTO
Sul mio sistema, alcune di queste directory sono vuote anche quando Postgres è in esecuzione. Forse, come parte di qualche operazione di "pulizia", Yosemite rimuove le directory vuote? In ogni caso, sono andato avanti e ho creato un file '.keep' in ogni directory per evitare future cancellazioni.
touch /usr/local/var/postgres/{{pg_commit_ts,pg_dynshmem,pg_replslot,pg_serial,pg_snapshots,pg_stat,pg_stat_tmp,pg_tblspc,pg_twophase},pg_logical/{mappings,snapshots}}/.keep
Nota :Creazione del .keep
file in quelle directory creerà del rumore nel tuo file di registro, ma non sembra influenzare negativamente nient'altro.