L'impostazione di PostgreSQL genera un errore sudo: initdb: comando non trovato


9

Passaggio 1: ho installato PostgreSQL usando sudo apt-get install postgresql-9.1come raccomandato sul sito Web PostgreSQL

Passaggio 2: ho provato a correre postgres. Non è stato trovato Per qualsiasi motivo, l'installazione non sembra aggiungerlo al percorso? Quindi ho dovuto aggiungere manualmente la linea export PATH=$PATH:/usr/lib/postgresql/9.1/binin fondo alla mia ~/.profile. (Sidenote: Qualcuno sa perché questo è necessario? Sto facendo qualcosa di sbagliato con l'installazione? Tutto il resto che ho installato in Ubuntu "funziona" senza cambiare il $PATH...)

Passaggio 3: provo a correre initdb /usr/local/var/postgres. Permesso negato. Provo a correre sudo initdb /usr/local/var/postgres. Il risultato è sudo: initdb: command not found. Come non viene trovato questo comando? Ho appena corso la dannata cosa! echo sudo $PATHmostra la directory PostgreSQL nel percorso ... cosa mi sto perdendo?

Sono un po 'un principiante in Linux, ma questi sono i tipi di problemi super irritanti che continuo a incontrare!

AGGIORNAMENTO : credo sia correlato a questa domanda . Tuttavia, l'esecuzione il comando con sudo -inon non risolve il problema. Ottengo solo: -bash: initdb: command not found. Grande.

UPDATE : Questo sembra ancora più vicino. Quindi ho aggiunto alias sudo='sudo env PATH=$PATH'al mio .bashrccome indicato. Non funziona ancora! Sembra che l'alias non funzioni. Quando corro alias, ne mostro solo uno. Eppure il mio .bashrcè pieno di loro ... quindi c'è qualcosa di sbagliato in quelli che si stanno preparando.

AGGIORNAMENTO : Dal momento che sto usando Ubuntu e RVM, RVM mi ha consigliato di impostare il terminale su "Esegui comando come shell di accesso". Sulla base della lettura che ho fatto qui , sembra che il .bashrcfile non sia letto in una shell di accesso, ma solo nel profilo. Quindi ho spostato la aliaslinea da .bashrca .profile, quindi .profileora ha questo alla fine:

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

... e ancora non funziona. L'esecuzione aliasmostra solo un alias RVM, ma non l' sudoalias che ho provato a configurare.

AGGIORNAMENTO Da questo sito , ho letto della precedenza dei dotfile. Sembra che .bash_profilevenga prima .profile. Detto questo, le mie PATHaggiunte sono state completate .profilee sembrano essere state caricate bene, quindi perché non aliasfunziona anche? Spostando il aliasin .bash_profileda .profilefunzionato, però. Mistero. Quindi il aliascomando mostra il mio nuovo alias. Ho finalmente digito sudo initdb /usr/local/var/postgres, per essere soddisfatte con: initdb: cannot be run as root. Oh veramente? Allora perché mi stavi dando errori di autorizzazione ?! Quindi ora penso che il problema sia che devo solo accedere alla chowncartella, ma eseguire comunque initdbcome utente anziché root.

AGGIORNAMENTO L' esecuzione del comando sudo chown myuser /usr/local/var/postgres/, quindi l'esecuzione initdbsuccessiva ha consentito l'inizializzazione del database. Sono contento che fosse così ovvio che le autorizzazioni della directory dovevano essere impostate su myuser e non su root. Incredibile. Inizializzazione del database riuscita 4 ore dopo.

Risposte:


9

Una volta installato il server PostgreSQL con apt-get install postgresql-9.1, è già impostato e funzionante, quindi i tuoi passaggi n. 2 e n. 3 (run postgresand run initdb) non sono necessari e in effetti sarebbero in conflitto con ciò che è già stato impostato. Eseguendo manualmente initdbfinirai con due cluster postgres.

I pacchetti postgresql per Debian e Ubuntu forniscono un comando chiamato pg_createcluster che risiede /usr/bine che potresti chiamare, nel caso in cui dovessi creare un nuovo cluster. Sotto il cofano, questo comando chiamerà initdbcon i parametri giusti. L'utente finale non deve chiamare initdbdirettamente, motivo per cui non si trova nel PERCORSO normale. Esistono anche altri comandi come pg_dropcluster e pg_ctlcluster che sostituiscono le modalità di amministrazione di un'istanza PostgreSQL non impacchettata.

Tutto questo è pensato per il sistema di packaging per gestire e aggiornare automaticamente i cluster, che sono caratteristiche che la linea di base PostgreSQL lascia all'amministratore del database.


6

Quando esegui sudo, è meglio inserire il percorso completo del comando che stai eseguendo. Nel tuo caso:

sudo /usr/lib/postgresql/9.1/bin/initdb /usr/local/var/postgres

2
Sono sicuro che funzionerà, ma perché sono l'unica persona ad avere questo problema? Nessuno dei tutorial o siti che sto guardando ti dice di prefigurare il comando con l'intero percorso.
aardvarkk,

Quando si esegue sudo, legge l'impostazione impostata nel file sudoers. Esistono diverse impostazioni relative all'ambiente e se devono essere ripristinate o mantenute. Questo post parla del mantenimento dell'ambiente, superuser.com/questions/232231/… se è quello che vuoi fare.
Lipongo,

1

Ho avuto questo problema con un'istanza di Amazon Web Services. Il sito Postgresql presuppone che il server e il client siano installati.

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


0

È molto probabile che initdb non sia stato installato in un $PATHpercorso. Controlla i tuoi percorsi (dove il sistema cerca eseguibili)

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

Per trovare dove è initdbstato installato, puoi semplicemente cercarlo direttamente

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

hai due scelte in questo caso. Aggiungi la directory postgres $PATHo esegui una delle operazioni mvin una delle posizioni elencate in$PATH

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

di conseguenza, initdbdovrebbe darti un qualche tipo di output.

 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.

Assicurati di spostare il Postgresbinario nella stessa posizione diinitdb

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.