Configurando o PostgreSQL dá erro sudo: initdb: comando não encontrado

5

Passo 1: Eu instalei o PostgreSQL usando sudo apt-get install postgresql-9.1 como recomendado no site do PostgreSQL

Etapa 2: tentei executar postgres . Não é encontrado. Por alguma razão, a instalação não parece adicioná-lo ao caminho? Então eu tive que adicionar manualmente a linha export PATH=$PATH:/usr/lib/postgresql/9.1/bin ao final do meu ~/.profile . (Sidenote: Alguém sabe por que isso é necessário? Estou fazendo algo errado com a instalação? Tudo o que eu instalei no Ubuntu "apenas funciona" sem alterar o $PATH ...)

Etapa 3: Eu tento executar initdb /usr/local/var/postgres . Permissão negada. Eu tento executar sudo initdb /usr/local/var/postgres . O resultado é sudo: initdb: command not found . Como este comando não é encontrado? Eu apenas corri a maldita coisa! echo sudo $PATH mostra o diretório do PostgreSQL no caminho ... o que me falta?

Sou um pouco novato no Linux, mas esses são os tipos de problemas super-irritantes que eu continuo encontrando!

UPDATE : acredito que esteja relacionado a esta questão . No entanto, executar o comando com sudo -i não não corrige o problema. Acabei de receber: -bash: initdb: command not found . Ótimo.

UPDATE : Isso parece ainda mais próximo. Então eu adicionei alias sudo='sudo env PATH=$PATH' ao meu .bashrc como instruído. Ainda não funciona! Parece que o alias não está funcionando. Quando executo alias , mostro apenas um único. E mesmo assim meu .bashrc está cheio deles ... então, algo está errado com aqueles que estão sendo configurados.

UPDATE : Como estou usando o Ubuntu e o RVM, o RVM recomendou que eu configurasse o terminal para "Executar o comando como shell de login". Com base na leitura eu fiz aqui , parece que o arquivo .bashrc não é lido em um shell de login, somente perfil. Então, movi a linha alias de .bashrc para .profile , então .profile agora tem isso no final:

export PATH="/usr/lib/postgresql/9.1/bin:$PATH"
alias sudo='sudo env PATH=$PATH'

... e ainda não funciona. A execução de alias mostra apenas um alias RVM, mas não o alias sudo que tentei configurar.

UPDATE Em este site , li sobre a precedência de dotfiles. Parece que .bash_profile vem antes de .profile . Dito isto, as minhas adições de PATH foram feitas em .profile e pareciam estar carregadas muito bem, então porque é que o alias também não funcionava? Movendo o alias para .bash_profile de .profile trabalhado, no entanto. Mistério. Então, o comando alias mostra meu novo alias. Eu finalmente digito sudo initdb /usr/local/var/postgres , para ser encontrado com: initdb: cannot be run as root . Sério? Então por que você estava me dando erros de permissão ?! Então, agora eu acho que o problema é que eu só tenho que chown da pasta, mas ainda executar initdb como meu usuário, em vez de root .

UPDATE Executar o comando sudo chown myuser /usr/local/var/postgres/ e depois executar initdb permitiu que o banco de dados fosse inicializado. Ainda bem que era tão óbvio que as permissões do diretório precisavam ser definidas para myuser e não para root. Incrível. Banco de dados bem-sucedido init 4 horas depois.

    
por aardvarkk 01.12.2012 / 21:03

4 respostas

9

Depois de instalar o servidor PostgreSQL com apt-get install postgresql-9.1 , ele já está configurado e em execução, portanto, suas etapas 2 e 3 (executar postgres e executar initdb ) não são necessárias e, de fato, entrariam em conflito o que já foi configurado. Ao executar manualmente initdb você terminará com dois clusters de postgres.

Os pacotes postgresql para Debian e Ubuntu fornecem um comando chamado pg_createcluster que reside em /usr/bin e que você pode chamar, caso precise criar um novo cluster. Sob o capô, esse comando chamará initdb com os parâmetros corretos. O usuário final não deve chamar initdb diretamente, e é por isso que ele não está no PATH normal. Existem também outros comandos como pg_dropcluster e pg_ctlcluster que substituem as formas como uma instância do PostgreSQL não empacotada seria administrada.

Tudo isso significa que o sistema de empacotamento deve manipular e atualizar automaticamente os clusters, que são recursos que o PostgreSQL de linha de base deixa para o administrador de banco de dados.

    
por 28.12.2012 / 14:07
5

Quando você executa o sudo, é melhor colocar o caminho completo para o comando que está executando. Na sua instância:

sudo /usr/lib/postgresql/9.1/bin/initdb /usr/local/var/postgres
    
por 01.12.2012 / 21:37
1

Eu tive esse problema com uma instância do Amazon Web Services. O site do Postgresql supõe que você tenha o servidor e o cliente instalados.

sudo yum install postgresql postgresql-server postgresql-devel postgresql-contrib postgresql-docs

    
por 04.07.2016 / 20:04
0

É mais provável que o initdb não tenha sido instalado em um local $PATH . Verifique seus caminhos (onde o sistema procura por executáveis)

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Para encontrar onde o initdb foi instalado, basta procurá-lo diretamente

find / -name initdb
/usr/lib/postgresql/9.1/bin/initdb /usr/local/bin/

você tem duas opções neste caso. Adicione o diretório postgres a $PATH ou faça um mv em um dos locais listados em $PATH

 mv /usr/lib/postgresql/9.1/bin/initdb /usr/local/bin/

como resultado, initdb deve fornecer algum tipo de saída.

 initdb
 initdb: no data directory specified
 You must identify the directory where the data for this database system
 will reside.  Do this with either the invocation option -D or the
 environment variable PGDATA.

Certifique-se de mover o binário Postgres para o mesmo local que initdb

    
por 16.04.2018 / 17:37