Resolvido... em parte.
Aparentemente, a instalação das versões mais recentes do OS X (por exemplo, Yosemite ou El Capitan) remove alguns diretórios em
/usr/local/var/postgres
. Para corrigir isso, basta recriar os diretórios ausentes:
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
Ou, de forma mais concisa (graças 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}}
Reexecutando
pg_ctl start -D /usr/local/var/postgres
agora inicia o servidor normalmente e, pelo menos para mim, sem perda de dados. ATUALIZAÇÃO
No meu sistema, alguns desses diretórios estão vazios mesmo quando o Postgres está em execução. Talvez, como parte de alguma operação de "limpeza", o Yosemite remova todos os diretórios vazios? De qualquer forma, fui em frente e criei um arquivo '.keep' em cada diretório para evitar a exclusão futura.
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
Observação :Criando o
.keep
arquivo nesses diretórios criará algum ruído em seu arquivo de log, mas não parece afetar negativamente qualquer outra coisa.