instalação postgresql: diretório de dados initdb não está vazio?

17

Estou tentando criar o banco de dados postgresql.

Ao instalar o PostgreSQL, dei este comando:

sudo yum install postgresql postgresql-server

e depois modifiquei o arquivo de configuração:

sudo vim /var/lib/pgsql/data/pg_hba.conf

e modificado como

local   all         all                               trust
host    all         all         127.0.0.1/32          trust
host    all         all         ::1/128               trust
host    all         all         0.0.0.0/0             md5

Enquanto estou tentando inicializar o serviço postgresql:

sudo service postgresql initdb

> Data directory is not empty!                               [FAILED]

sudo chkconfig postgresql on

sudo service postgresql start

Starting postgresql service:                               [  OK  ]

O que causou esses erros e como corrigi-los?

sridhar
fonte

Respostas:

18

O Initdb deve ser executado apenas uma vez. Ele criará o diretório em que você manterá os arquivos de configuração e (geralmente) o banco de dados real. Você obviamente já fez isso; Caso contrário, não haveria pg_hba.conf para você editar.

Portanto, não execute postgresql initdbnovamente, a menos que esteja fazendo uma reinstalação completa.

Jenny D
fonte
obrigado pela resposta .. eu executá-lo duas vezes ... você quer dizer o que não é o problema na instalação ..
sridhar
Quero dizer que não há nenhum problema com sua instalação, pelo menos não o que você mostrou. A única coisa que está falhando é executar o initdb mais de uma vez, e isso deve falhar - todo o resto é exibido como OK. Se houver algum outro problema, ajudaria se você pudesse descrevê-lo.
Jenny D
Muito obrigado .. então não é um problema .. se eu enfrentar um problema eu irei informá-lo .. #
314
15

A partir daqui :

Se você estiver limpando e reinstalando completamente um banco de dados do Postgres, ao executar initdbcomo:

service postgresql-9.2 initdb -E 'UTF8' --pgdata="/foo/bar/"

você pode encontrar este erro de serviço:

O diretório de dados não está vazio! [FALHOU]

Para corrigi-lo (e esta é a opção nuclear - todos os dados do banco de dados são apagados!)

No Amazon Linux (2014-x):

rm -rf /var/lib/pgsql9/data

No CentOS (6.x)

rm -rf /var/lib/pgsql/9.2/data

Agora tente o initdbcomando novamente e deve funcionar desta vez:

service postgresql-9.2 initdb

sv.
fonte
4

Em sistemas baseados em systemd como RHEL / CentOS 7 e Fedora, o procedimento para executar o initdb é um pouco diferente. Isso não é mais feito pelos scripts init (que não existem mais), e o novo procedimento está muito mais próximo das instruções upstream .

Você deve primeiro suao postgresusuário e, em seguida, executar initdbou pg_ctl initdb. Não é necessário fornecer um diretório de dados se você estiver usando uma compilação Red Hat, pois o padrão escolhe automaticamente o diretório de dados padrão /var/lib/pgsql.

Por exemplo:

# su - postgres
$ pg_ctl initdb
$ exit
#

Obviamente, você só faz isso uma vez, na primeira instalação, para configurar o diretório de dados inicial. Você não faria isso novamente, a menos que estivesse criando uma instalação completamente nova ou restaurando de um desastre.

Michael Hampton
fonte
3

Eu tive o mesmo problema, usando o PostgreSQL 9.3 no CentOS 6.

Excluí a pasta /var/lib/pgsql/9.3/data e, em seguida, executei novamente o comando

sudo service postgresql-9.3 initdb

... que inicializou com êxito o serviço db novamente.

Análise Fuzzy
fonte