web-dev-qa-db-ja.com

PostgreSQL vagrant VM拡張子を作成できません

PostgreSQLのインストール中にいくつかの問題があり、最終的にVMソリューションはvagrantで管理され、説明されているように postgresql wikiで を使用することにしました。

(当初、私の動機はインストールの問題を解決することでしたが、仮想マシンソリューションには多くの利点があることがわかりました)。

私はそれで働き始めました、そして、すべてが非常によく見えました。しかし、最終的にはcrosstabdoc )を使用したかったのですが、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からすべてを管理できるようにします。

読んでくれてありがとう。

3
lrnzcig

自動インストール後の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 peermd5、パスワードを設定した後。個人的には理由がよくわかりません。そのルールはそのままにして、自分のUnixアカウントからpgAdminを実行し、localhost TCP接続を選択します。

3
Daniel Vérité