Eu uso postgres de homebrew no meu OS X, mas quando eu reiniciar o meu sistema, por vezes, os postgres não começar após o reinício, e então eu tentei manualmente para começar com postgres -D /usr/local/var/postgres
, mas, em seguida, o erro ocorreu com a seguinte mensagem: FATAL: could not open directory "pg_tblspc": No such file or directory
.
A última vez que ocorreu, eu não consegui obtê-lo no estado original, então decidi desinstalar todo o sistema do postgres, reinstalá-lo e criar usuários, tabelas, conjuntos de dados, etc ... Era tão nojento, mas ocorre frequentemente no meu sistema, digamos uma vez em alguns meses.
Então, por que ele perde o pg_tblspc
arquivo com frequência? E há algo que eu possa fazer para evitar a perda do arquivo?
Não atualizei meu homebrew e postgres para a versão mais recente (ou seja, estou usando a mesma versão). Além disso, tudo o que fiz no banco de dados do postgres é excluir a tabela e preencher os novos dados todos os dias. Não mudei usuário, senha, etc ...
EDIT (mbannert): senti a necessidade de adicionar isso, pois o segmento é o principal hit do google para esse problema e para muitos o sintoma é diferente. Os homebrewers provavelmente encontrarão esta mensagem de erro:
No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
Portanto, se você acabou de experimentar isso após a atualização do Yosemite, agora está coberto por ler este tópico.
fonte
pg_tblspc
é um diretório . A única maneira de ver esse diretório e desaparecer aleatoriamente é a corrupção do sistema de arquivos ou um scanner de vírus ou uma ferramenta de sincronização de arquivos particularmente mal comportada.tablespaces
é, então acho que não coloco no armazenamento externo.pg_tblspc
não desaparece apenas em qualquer sistema que eu já encontrei, nem posso imaginar uma razão sã. Vai ser muito difícil dizer o que torna seu sistema diferente sem muito mais detalhes.Respostas:
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 do
/usr/local/var/postgres
.Para corrigir isso, basta recriar os diretórios ausentes:
Ou, de forma mais concisa ( graças a Nate ):
A nova execução
pg_ctl start -D /usr/local/var/postgres
agora inicia o servidor normalmente e, pelo menos para mim, sem perda de dados.ATUALIZAR
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 qualquer diretório vazio? De qualquer forma, fui adiante e criei um arquivo '.keep' em cada diretório para impedir a exclusão futura.
Nota : A criação do
.keep
arquivo nesses diretórios criará algum ruído no seu arquivo de log, mas não parece afetar negativamente qualquer outra coisa.fonte
mkdir -p /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/
etouch /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/.keep
could not open temporary-files directory "pg_tblspc/.keep/PG_9.3_201306121/pgsql_tmp": Not a directory
mkdir /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp,pg_replslot}
A resposta de Donavan é imediata, eu só queria acrescentar que, como fiz coisas diferentes com o banco de dados (por exemplo
rake db:test
), ele procurou por diretórios diferentes que não foram mencionados acima e engasgaria quando não estivesse presente, em No meu casopg_logical/mappings
, você pode configurar um terminal em execução:e observe se há pastas ausentes enquanto você realiza suas atividades típicas de banco de dados.
fonte
Isso é um pouco estranho, mas vale a pena notar aqui como parte do processo de recuperação do PostgreSQL Yosemite. Eu tive o mesmo problema acima e tive um problema com o PostgreSQL "aparentemente" sendo executado em segundo plano, portanto, mesmo após adicionar diretórios, não consegui reiniciar. Eu tentei usar
pg_ctl stop -m fast
para matar o servidor PostgreSQL, mas sem sorte. Também tentei ir diretamente após o processo,kill PID
mas assim que o processo PostgreSQL reapareceu com um PID diferente.A chave acabou sendo um
.plist
arquivo que o Homebrew carregou ... A correção para mim acabou sendo:Depois disso, consegui iniciar o PostgreSQL normalmente.
fonte
launchctl unload ${HOME}/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
mas basicamente esse também era o mesmo problema para mim e a mesma solução.Os diretórios ausentes precisam estar presentes no diretório de dados do PostgreSQL. O diretório de dados padrão é
/usr/local/var/postgres/
. Se você configurou um diretório de dados diferente, precisará recriar os diretórios ausentes lá. Se você modificou o.plist
arquivo recomendado pelo homebrew que inicia o PostgreSQL, você pode encontrar o diretório de dados lá:(é a
-D
opção com a qual você iniciou o postgres :)No exemplo acima, você criaria os diretórios ausentes
/usr/local/pgsql/data
, da seguinte maneira:fonte
Criar os diretórios ausentes certamente funciona, mas eu o corrigi reinicializando o postgres db; essa é uma abordagem mais limpa para evitar problemas futuros.
NOTA: Essa abordagem excluirá os bancos de dados existentes
fonte