web-dev-qa-db-ja.com

PostgreSQLのセットアップでエラーSudo:initdb:command not foundが発生する

ステップ1:PostgreSQLのWebサイトで推奨されているSudo apt-get install postgresql-9.1を使用してPostgreSQLをインストールしました

ステップ2:postgresを実行しようとしました。見つかりません。何らかの理由で、インストールがパスに追加していないように見えますか?そのため、export PATH=$PATH:/usr/lib/postgresql/9.1/binの最後に~/.profileという行を手動で追加する必要がありました。 (補足:これが必要な理由は誰でも知っていますか?インストールで何か問題がありますか?Ubuntuにインストールした他のすべては$PATH...を変更せずに「正常に動作する」

手順3:initdb /usr/local/var/postgresを実行してみます。アクセス拒否。 Sudo initdb /usr/local/var/postgresを実行してみます。結果はSudo: initdb: command not foundです。このコマンドが見つからないのはなぜですか?私はいまいましいことを実行しました! echo Sudo $PATHは、パス内のPostgreSQLディレクトリを示しています...何が欠けていますか?

私はLinuxの初心者ですが、これらは私が遭遇し続ける一種の非常に刺激的な問題です!

[〜#〜] update [〜#〜]この質問 に関連していると思います。ただし、Sudo -iを指定してコマンドを実行しても、問題は修正されません。ただ取得します:-bash: initdb: command not found。すごい。

[〜#〜] update [〜#〜]This はさらに近いようです。そのため、私はalias Sudo='Sudo env PATH=$PATH'.bashrcに指示どおりに追加しました。まだ効果がありません!エイリアスが機能していないようです。 aliasを実行すると、1つしか表示されません。それでも、私の.bashrcはそれらでいっぱいです...そのため、セットアップするものに問題があります。

[〜#〜] update [〜#〜]:UbuntuとRVMを使用しているため、RVMはターミナルを「実行ログインシェルとしてのコマンド」。私が行った読み取り here に基づいて、.bashrcファイルはログインシェルでは読み取られず、プロファイルのみが読み取られたようです。 alias行を.bashrcから.profileに移動したので、.profileの末尾に次のようになりました。

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

...そしてそれはまだ機能しません。 aliasを実行してもRVMエイリアスのみが表示され、設定しようとしたSudoエイリアスは表示されません。

[〜#〜] update [〜#〜]this site から、ドットファイルの優先順位について読みました。 .bash_profile.profileより前にあるようです。そうは言っても、私のPATHの追加は.profileで行われ、正常にロードされているように見えたので、aliasも機能しなかったのはなぜですか。ただし、alias.bash_profileから.profileに移動することはできました。神秘。したがって、aliasコマンドは私の新しいエイリアスを表示します。最後にSudo initdb /usr/local/var/postgresと入力し、次のように入力します:initdb: cannot be run as root。まあ、本当に?次に、なぜ私に許可エラーを与えたのですか?!だから今問題は、フォルダをchownしなければならないのに、initdbではなくrootをユーザーとして実行する必要があることだと思います。

[〜#〜] update [〜#〜]コマンドSudo chown myuser /usr/local/var/postgres/を実行し、その後initdbを実行すると、初期化するデータベース。ディレクトリのアクセス許可をルートではなくmyuserに設定する必要があったことは非常に明白でした。信じられない。 4時間後にデータベースの初期化が成功しました。

9
aardvarkk

apt-get install postgresql-9.1を使用してPostgreSQLサーバーをインストールすると、セットアップと実行が完了しているため、手順#2と#3(postgresを実行してinitdbを実行)は不要であり、実際には、すでに設定されているものと競合します。手動でinitdbを実行すると、2つのpostgresクラスターが作成されます。

DebianおよびUbuntuのpostgresqlパッケージは、/usr/binに常駐する pg_createcluster というコマンドを提供し、新しいクラスターを作成する必要がある場合に呼び出すことができます。内部的には、このコマンドは正しいパラメータを使用してinitdbを呼び出します。エンドユーザーはinitdbを直接呼び出すことは想定されていないため、通常のPATHにはありません。 pg_dropclusterpg_ctlcluster のような、パッケージ化されていないPostgreSQLインスタンスの管理方法に取って代わる他のコマンドもあります。

これはすべて、パッケージングシステムがクラスタを自動的に処理およびアップグレードすることを目的としています。これは、ベースラインのPostgreSQLがデータベース管理者に残す機能です。

9
Daniel Vérité

Sudoを実行するときは、実行しているコマンドへのフルパスを配置するのが最善です。あなたのインスタンスでは:

Sudo /usr/lib/postgresql/9.1/bin/initdb /usr/local/var/postgres
6
Lipongo

アマゾンウェブサービスインスタンスでこの問題が発生しました。 Postgresqlサイトは、サーバーとクライアントがインストールされていることを前提としています。

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

1
Rich Rademacher

Initdbが$PATHの場所にインストールされなかった可能性があります。パスを確認します(システムが実行可能ファイルを探す場所)

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

initdbがインストールされている場所を見つけるには、それを直接探すだけです。

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

この場合、2つの選択肢があります。 postgresディレクトリを$PATHに追加するか、mv$PATHにリストされている場所の1つに実行します

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

その結果、initdbは何らかの出力を提供するはずです。

 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.

必ずPostgresバイナリをinitdbと同じ場所に移動してください

0
Serguei Fedorov