PostgreSQLのインストール中にいくつかの問題があり、最終的にVMソリューションはvagrantで管理され、説明されているように postgresql wikiで を使用することにしました。
(当初、私の動機はインストールの問題を解決することでしたが、仮想マシンソリューションには多くの利点があることがわかりました)。
私はそれで働き始めました、そして、すべてが非常によく見えました。しかし、最終的にはcrosstab
( doc )を使用したかったのですが、tablefunc
拡張機能が仮想マシンにインストールされておらず、インストールする方法が見つかりません。
仮想マシンは、初めて実行するときにアプリケーションのユーザーを作成します。これは問題ありません。また、アプリケーションのデータベースも作成します。しかし、アプリケーションのユーザーで拡張機能をインストールしようとすると
create extension tablefunc;
次のエラーが表示されます(とにかく予想されます)。
エラー:拡張機能「tablefunc」を作成する権限が拒否されました
SQL状態:42501
ヒント:この拡張機能を作成するには、スーパーユーザーである必要があります。
重要なのは、postgres
ユーザーのパスワードがないため、pgAdmin
を使用して拡張機能をインストールできないことです。 (これはすでに他の問題があり、管理者が必要な場合、私を少し怖がらせる問題です。しかし、私は周りを閲覧してきましたが、これに関するコメントは見つかりませんでした。)
Postgres wikiの上記のリンクでは、VMにスーパーユーザーとして接続する方法について説明しています。これも試してみましたが、
vagrant ssh
Sudo su - postgres
しかし、もう一度インストールのコマンドを実行しようとすると、データベースでpostgres
ユーザーのパスワードを要求されました。たとえば、試験の1つ:
postgres@postgresql:~$ psql -h localhost -U postgres -d vic -c 'create extension tablefunc'
Password for user postgres:
psql: FATAL: password authentication failed for user "postgres"
私の質問は、vagrantの拡張機能をインストールする方法がある場合VM(またはいずれにしても、スーパーユーザーでコマンドを実行する方法です)。パスワード、pgAdmin
からすべてを管理できるようにします。
読んでくれてありがとう。
自動インストール後のpostgres
にはパスワードがありません。peer
メソッドを介して認証されることが期待されています。 Sudo su - postgres
はその最初のステップです。 2番目のステップは、Unixローカルドメインソケットを介して接続することですが、コマンドはそれを行わず、TCPを介して接続するため、パスワードの問題に悩まされています。
インストールされたpg_hba.conf
ファイルは、コメントを除いて、おそらくこれらの2つのルールで始まります。
#Unixドメインソケットによるデータベース管理ログイン local all postgres peer #IPv4ローカル接続: Host all all 127.0.0.1/32 md5 [...]
TCP -h localhost...
との接続]を実行すると、最初のルールが一致しません。2番目のルールは一致し、パスワードの要求をトリガーしますが、何も設定されていないため、失敗する可能性があります(空のパスワードも許可されていません)。
解決策は、代わりに最初のルールが適用されるように、-h localhost
をpsql呼び出しから削除することです。 Unixシステム上にあるため、Unixドメインソケットを介して接続を試みます。
Postgresユーザーとしてpsqlにログインしたら、\password
コマンドまたはALTER USER postgres PASSWORD 'foobar';
を使用してパスワードを設定できます。
参照 https://help.ubuntu.com/community/PostgreSQL
セクションUsing pgAdmin III GUIで、彼らはpg_hba.conf
の最初のルールをauth peer
〜md5
、パスワードを設定した後。個人的には理由がよくわかりません。そのルールはそのままにして、自分のUnixアカウントからpgAdminを実行し、localhost TCP接続を選択します。