[Ubuntu 16.04] Instalei o postgresql 9.5 junto com as dependências:
sudo sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-common
sudo apt-get install postgresql-9.5 libpq-dev
Quando quero correr psql
, recebo:
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
Mas /var/run/postgresql/
está vazio. Quando eu reinicio o posgresql, tudo parece estar bem:
$ /etc/init.d/postgresql restart
[ ok ] Restarting postgresql (via systemctl): postgresql.service.
$ /etc/init.d/postgresql status
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since wto 2016-09-27 16:18:26 CEST; 1min 15s ago
Process: 3076 ExecReload=/bin/true (code=exited, status=0/SUCCESS)
Process: 3523 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 3523 (code=exited, status=0/SUCCESS)
mas se verificar ps aux
não existe tal PID (por quê ??)
A reinstalação total não ajuda em nada. Como posso corrigir isso?
postgresql
mike927
fonte
fonte
Respostas:
Esta é uma idiossincrasia da integração de sistemas do PostgreSQL no Xenial.
A unidade de serviço postgresql instalada pelo pacote postgresql-common é apenas um serviço fictício que faz com que o serviço real [email protected] seja iniciado por uma dependência. Você pode ver essa dependência executando o comando
Essa dependência não é permanente, mas é gerada durante a inicialização do sistema pelo gerador systemd,
/lib/systemd/system-generators/postgresql-generator
que também vem com o pacote postgresql-common. O gerador verifica se o modo de inicialização no arquivo/etc/postgresql/9.6/main/start.conf
está definido comoauto
, e se sim, configura a dependência que subsequentemente faz com que a instância 9.6-main seja iniciada.(Mais precisamente, ele verifica todos os subdiretórios de configuração
/etc/postgresql/*/*
e cria dependências para todas as instâncias configuradas para inicialização automática, mas em uma instalação padrão, haverá apenas uma instância).Devido às limitações dos geradores systemd (consulte
man systemd.generator
), esse processo pode falhar, fazendo com que as dependências estejam ausentes após uma reinicialização. O Systemd iniciará apenas o serviço fictício, escrevendopara o log, mas, caso contrário, não fará nada. Tentativa de iniciar o serviço manualmente,
apenas reproduzirá esse resultado. Executando o comando
manualmente, pois o root executará novamente o gerador e, na maioria dos casos, corrigirá o problema até a próxima reinicialização.
Para resolver o problema permanentemente, você precisará encontrar o motivo pelo qual o gerador falha durante a inicialização. Possíveis causas podem ser encontradas na página de manual systemd.generator. No meu caso, foi o arquivo de configuração do PostgreSQL
/etc/postgresql/9.6/main/postgresql.conf
que foi vinculado a um sistema de arquivos diferente que ainda não estava disponível quando o gerador foi executado mais cedo durante a inicialização.postgresql-generator
verifica a existência desse arquivo, mesmo que não seja necessário.fonte
Estendendo a resposta de Tilman, mas não há elogios suficientes para comentar ...
Se você não precisar que o serviço seja chamado de postgresql e não se importe com o serviço fictício do wrapper, ele deve funcionar apenas para controlar o serviço real diretamente. Seu nome é: postgresql@$version-$cluster.service No seu caso, deve ser o postgresql-9.5-main em resumo. Gostaria de começar
e para parar:
O status também fornecerá informações muito melhores e precisas do que no serviço de wrapper gerado automaticamente.
Para a 9.6, é assim:
fonte
No meu caso, isso estava relacionado a códigos de idioma configurados incorretamente.
Encontrei a solução nesta resposta do dba.stackexchange.com :
sudo dpkg-reconfigure locales
para gerar os locais necessáriossudo pg_dropcluster 9.5 main
(isso apagará todos os dados no cluster!)sudo pg_createcluster 9.5 main --start
sudo service postgresql restart
fonte
seria melhor usar scripts de inicialização do systemd com o ubuntu 16.04, os scripts init podem não funcionar corretamente atualmente. O Postgres 9.5 já está nos repositórios do ubuntu, então tente que, em vez disso, ele deve ter a inicialização do systemd.
fonte
Outro "foi mordido por isso".
De
pg_upgradecluster
fato, deixou a versão de destino (9.6) no modo "manual" na porta 5433 e a versão de origem (9.5) na porta 5432.Mesmo depois
pg_dropcluster 9.5
. A edição do arquivo start.conf não ajudou, mas a dica era usarsystemctl daemon-reload
, pois o gerador decide com base nesse arquivo de configuração se deve ligar novamente o arquivo de serviço:Portanto, se o cluster que você deseja iniciar não tiver a palavra "auto" no start.conf, será necessário recarregar o sistema (ou reiniciar) para habilitá-lo no momento da inicialização.
Ainda temos que verificar isso com uma reinicialização, mas considerando o que foi dito acima, bastante confiante de que esse era o problema.
fonte
Desabilitei o "super serviço" mágico assim:
Então eu ativei o serviço concreto:
Depois de reiniciar tudo funcionou novamente.
fonte
Teve o mesmo erro, horas perdidas, solução simples. Verifique esta questão SO e minha resposta, que é:
fonte
Eu tive esse problema devido a um motivo diferente: permissões de diretório. Eu tinha um chmod de varredura completa como este:
Isso define o diretório como não executável, o que impede que o postgres o leia.
fonte
Eu tive esse mesmo problema ao verificar o problema encontrado com a permissão ssl-cert-snakeoil.key.
Definir propriedade
raiz do chown: ssl-cert ssl-cert-snakeoil.key chmod 640 ssl-cert-snakeoil.key
e fez uma reinicialização limpa.
fonte