ステップ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時間後にデータベースの初期化が成功しました。
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_dropcluster や pg_ctlcluster のような、パッケージ化されていないPostgreSQLインスタンスの管理方法に取って代わる他のコマンドもあります。
これはすべて、パッケージングシステムがクラスタを自動的に処理およびアップグレードすることを目的としています。これは、ベースラインのPostgreSQLがデータベース管理者に残す機能です。
Sudoを実行するときは、実行しているコマンドへのフルパスを配置するのが最善です。あなたのインスタンスでは:
Sudo /usr/lib/postgresql/9.1/bin/initdb /usr/local/var/postgres
アマゾンウェブサービスインスタンスでこの問題が発生しました。 Postgresqlサイトは、サーバーとクライアントがインストールされていることを前提としています。
Sudo yum install postgresql postgresql-server postgresql-devel postgresql-contrib postgresql-docs
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
と同じ場所に移動してください