2

Rails アプリをデフォルトの SQLite データベースで生成しましたが、いくつかのモデルを作成して数回移行した後、それを Postgresql に変更したいと考えています。

postgres gem を Gemfile に追加し、バンドルをインストールしてから、database.yml コードをすべて置き換えました。

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

production:
  adapter: sqlite3
  database: db/production.sqlite3
  pool: 5
  timeout: 5000

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  username: postgres
  password: mypass

development:
  <<: *default
  database: sample_app_development

test:
  <<: *default
  database: sample_app_test

production:
  <<: *default
  database: sample_app_production

FATAL: password authentication failed for user "postgres"パスワードが正しいのにエラーが発生します。手順が足りないからですか?このアプリをサーバーに追加したいことを pg Admin III を使用して PG に伝える必要がありますか? 新しい役割/つながりを作成する必要がありますか?

私はこの問題に数回遭遇しましたが、この特定の問題に対する答えを見つけることができないようです。

実行しようとすると、これが表示されますrake db:drop

Couldn't drop sample_app_development : #<PGError: FATAL:  role "postgres" does not exist
>
Couldn't drop sample_app_test : #<PGError: FATAL:  role "postgres" does not exist
>

=========

Edmunds-MacBook-Pro:sample_app edmundmai$ createuser foo
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y
Password: 
createuser: could not connect to database postgres: FATAL:  password authentication failed for user "edmundmai"
4

3 に答える 3

2

Postgres のユーザー認証は少し奇妙です。デフォルトでは、OS と同じ認証を使用します (少なくとも Linux では)。したがって、コマンド ラインから Postgres プロンプトにアクセスするには、次のようにする必要があります。

sudo -u postgres psql

パスワードがないことに注意してください。また、OS が認証を処理するため、パスワードは必要ありません (ただし、OS は必要に応じて sudo パスワードを要求します)。

したがって、オプション 1 は、Rails 構成ファイルからパスワード オプションを取り除くだけで、すべてがうまくいくことを願っています。それができない場合は、ファイルを編集してパスワードベースの認証を受け入れるように Postgres を設定しpg_hba.confます (私のものは です/etc/postgresql/9.2/main/pg_hba.conf)。これは私のローカル サーバーの例です。ユーザー「postgres」は OS の認証 (「peer」) を使用しますが、ユーザー「opengeo」はパスワード (「md5」) を使用します。

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             postgres                                peer
local   all             opengeo                                 md5

それが役立つことを願っています!

于 2012-12-24T18:40:47.233 に答える
1

データベースを postgresql に変換するには、まず以下のようにユーザーを作成します。

$ createuser foo
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y

データベースを作成するには:

CREATE DATABASE foo_db ENCODING 'UTF8' OWNER foo;

database.yml が以下のようになっていることを確認してください。

development:
  adapter: postgresql
  encoding: unicode
  database: foo_db
  pool: 5
  username: foo
  password:

test:
  adapter: postgresql
  encoding: unicode
  database: foo_test
  pool: 5
  username: foo
  password:
于 2012-12-24T18:46:17.373 に答える