Por que o PostgreSQL 9.3 não inicia no Ubuntu?

13

Instalei com êxito o PostgreSQL 9.3 a partir do repositório APT em 2 VMs executando o Ubuntu 12.04 e 13.04 ... no entanto, não consigo instalá-lo corretamente na minha máquina host executando o Ubuntu 12.04.

A instalação (desta vez) parece ter funcionado bem, mas talvez haja um erro que não estou entendendo:

* No PostgreSQL clusters exist; see "man pg_createcluster"
Setting up postgresql-9.3 (9.3.0-2.pgdg12.4+1) ...
Creating new cluster 9.3/main ...
  config /etc/postgresql/9.3/main
  data   /var/lib/postgresql/9.3/main
  locale en_US.UTF-8
  port   5432
update-alternatives: using /usr/share/postgresql/9.3/man/man1/postmaster.1.gz to provide /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) in auto mode.

Então, tento me adicionar como usuário do PostgreSQL, mas recebo o seguinte:

createuser: could not connect to database postgres: 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"?

Não consigo ver o PostgreSQL em execução no monitor do sistema e não há nenhum arquivo na pasta / var / run / postgresql / ... completamente vazio.

EDIT: Nas VMs, há um arquivo em / var / run / postgresql / chamado 9.3-main.pid

Não há nada no arquivo de log da máquina host localizado / var / log / postgresql

Então ... o que está acontecendo aqui que não está acontecendo nas minhas VMs? Como eu disse, as outras instalações nas VMs, incluindo PostGIS e PGAdmin, foram perfeitas ... não faço ideia do porquê dessa máquina host não estar passando ...

DPSSpatial
fonte
Você realmente tem um /var/run/postgresqldiretório? Em um estágio após a instalação bem-sucedida, essa pasta estava ausente na minha máquina. O que a configuração diz sobre qual diretório deve estar usando?
Colin 't Hart
@ Colin'tHart Eu tenho esse diretório ... no entanto, não há nada ... nas VMs, há um arquivo criado chamado 9.3-main.pid Onde eu encontraria essas informações de configuração?
perfil completo de DPSSpatial
postgresql.confno diretório de configuração, que de acordo com acima, é /etc/postgresql/9.3/main. Você também deve procurar nos arquivos de log, provavelmente em /var/log/postgresql.
Colin 'Hart
@ Colin'tHart O arquivo de log é vazio ... O arquivo de configuração - e acho que é isso que você - diz # Se external_pid_file não estiver definido explicitamente, nenhum arquivo PID extra será gravado. external_pid_file = '/var/run/postgresql/9.3-main.pid'
DPSSpatial
Existe um arquivo de soquete nesse diretório ou é realmente completamente vazio?
Colin 'Hart

Respostas:

16

Minhas configurações de localidade não foram definidas corretamente quando o PostgreSQL foi instalado. Limpar e reinstalar não ajudou. Eu segui as instruções aqui e isso fez o truque para mim.

Partes essenciais das informações vinculadas reproduzidas abaixo:

O problema se mostrou da seguinte maneira:

warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
...
are supported and installed on your system.

O primeiro foi muito fácil de resolver, executando:

#dpkg-reconfigure locales

... e escolhendo os locais preferidos.

Mas depois disso, o PostgreSQL ainda se recusou a iniciar. Isso se deve ao fato de o processo de instalação tentar criar um cluster no momento da instalação, mas devido às localizações incorretas, isso não foi feito. Portanto, temos que refazer esta etapa executando:

#pg_createcluster 9.3 main --start

(Para a versão 9.3 do PostgreSQL)

Após essa etapa, o PostgreSQL inicia sem problemas via

#/etc/init.d/postgresql start
Marko Benko
fonte
2
Salvou a minha vida. É realmente péssimo que limpar e reinstalar não ajude, mesmo quando o código do idioma é retificado. Isso desperdiçou 2 horas da minha vida :(
Escher
No caso pg_createclusterdiz-lhe que o cluster já existe você precisa deixá-la primeiro (isto irá apagar todos os dados nele, por isso verifique se você tem um backup): pg_dropcluster 9.3 main.
Florian Brucker
6

Espero que você já tenha resolvido esse problema, mas estou enfrentando um problema semelhante que parece ter uma fonte diferente e talvez minha experiência ajude se você ainda estiver tendo um problema.

Meu problema com o 9.3 no Ubuntu está relacionado ao diretório dir de soquete ser um diretório transitório em / run. Basicamente, o script init.d deve cuidar da criação do diretório dir no / run / postgresql, se ele não existir durante a ação de inicialização. Esse sempre será o estado das coisas após uma reinicialização.

O problema é, no entanto, que o script init.d será encerrado antes de executar a ação start se o diretório do soquete não existir. Isso ocorre porque a chamada para pg_lsclusters falhará sem o diretório do soquete, o que, por sua vez, impede que a ação inicial crie o diretório do soquete.

Ainda não descobri qual é a melhor solução, mas se eu realocar a lógica para criar o diretório do soquete da ação start para antes da chamada para pg_lsclusters, posso iniciar o servidor após a reinicialização sem problemas.

Aqui está a parte da ação inicial que lida com a criação do diretório dir:

# create socket directory
if [ -d /var/run/postgresql ]; then
  chmod 2775 /var/run/postgresql
else
  install -d -m 2775 -o postgres -g postgres /var/run/postgresql
  [ -x /sbin/restorecon ] && restorecon -R /var/run/postgresql || true
fi

Postarei uma atualização se a causa raiz ficar clara para mim, porque esse claramente não pode ser o comportamento esperado.

TERMO ADITIVO:

Eu acho que a razão pela qual eu estava enfrentando esse problema é porque não tinha um bom valor configurado para unix_socket_directories . No 9.2, essa opção de configuração costumava ser unix_socket_directory, que eu removi em vez de alternar para unix_socket_directories. Desde que defini um valor para unix_socket_directories, não tive nenhum problema com o servidor iniciando.

tdg5
fonte
obrigado @ tdg5 !!! Não resolvi isso, mas acho que tudo se resume a várias instalações ruins na minha máquina. Instalando a partir do Repositório Apt PostgreSQL em uma nova instalação do Ubuntu resolvido meus problemas ...
DPSSpatial
3
@mapBaker - Atualizei minha resposta para incluir a causa raiz do problema de inicialização do PG 9.3 em minha situação específica. Talvez seja útil para você também.
precisa saber é
1
Meu PG9.3 não foi iniciado após a reinicialização. A adição da linha "unix_socket_directories = '/ var / run / postgresql'" ao postgresql.conf da 9.3 resolveu a questão. Graças
alfonx
Obrigado! Estive trabalhando nisso por um tempo, feliz em encontrar esta pepita!
Serban Tanasa
3

Eu tive vários problemas com o arquivo sockets, no seu caso /var/run/postgresql/.s.PGSQL.5432

verifique se o diretório / var / run / postgresql existe e é gravável antes de iniciar o postgresql para obter mais informações, consulte esta discussão .

Além disso, ao conectar use -h flag:

psql -h localhost 

e veja se isso resolve.

Joe Love
fonte
1

Isso parece corrigir o problema no Ubuntu:

Edite postgresql.conf:

unix_socket_directories='/var/run/postgresql

Agora faça service postgresql start

sorin
fonte
1

Eu sou novo no PSQL, mas resolvi o problema editando o start.conf. Eu havia comentado a configuração "auto" para gerenciar o servidor manualmente, mas ele precisa de um valor: automático, manual ou desativado.

EGD.

Ernesto
fonte
1

Do meu lado, o script de inicialização está incorreto. Os arquivos de configuração estão instalados em /etc/postgresql/9.3/main, mas o script /usr/share/postgresql-common/init.d-functions está pesquisando em

for c in /etc/postgresql/"$2"/*; do 

Substitua esta linha por

for c in /etc/postgresql/"$2"/main; do
k_o_
fonte
-2

Todos,

depois de algumas escavações, encontrei (a) solução aqui:

http://ubuntuforums.org/showthread.php?t=869080

Que continha estas instruções:

Execute no terminal:

sudo mkdir -p /usr/local/pgsql/data
sudo chown -R postgres:postgres /usr/local/pgsql/
sudo su - postgres
cd /usr/lib/postgresql/9.3/bin/
./initdb -D /usr/local/pgsql/data
./postgres -D /usr/local/pgsql/data

Agora meu servidor está funcionando !!!

EDIT : após uma reinicialização, o servidor ainda não está em execução ...

Quaisquer pensamentos sobre por que eu precisava executar isso são apreciados!

DPSSpatial
fonte
Tem certeza de que está 9,3 em execução? O número da versão parece suspeito ...
dezso ' 04/10
@dezso desculpe esqueci de mudar a versão # quando colei nesses comandos ... isso é tudo na v9.3 ...
DPSSpatial
Pode ser necessário especificar a porta. A porta padrão está sendo usada pela sua instalação antiga do postgres. Sua nova instalação está usando a porta 5433 provavelmente, mas é algo que você pode verificar com certeza lendo o arquivo de configuração do postgresql:/etc/postgresql/9.3/main/postgresql.conf
user35581
1
Isso pode ser uma solução alternativa, mas claramente não é uma boa solução. Este aqui está resolvendo o problema dba.stackexchange.com/a/91511/8099
Sorin