2012-12-24 51 views
2

我使用默認的SQLite數據庫生成了我的rails應用程序,但創建了幾個模型並遷移了幾次後,我想將其更改爲Postgresql。Rails:如何在開發過程中將數據庫從SQLite更改爲PG?

我把Postgres寶石我的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使用PG Admin III,我想將這個應用程序添加到我的服務器?我應該創建一個新的角色/連接?

我已經遇到了這個問題幾次,似乎無法找到這個具體問題的答案。

它給了我這個當我嘗試運行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" 
+0

我認爲你至少需要設置'host'和'port'參數;請參閱http://stackoverflow.com/questions/10263821/rails-rake-dbcreateall-fails-to-connect-to-postgresql-database – Baldrick

+0

添加後,我仍然得到該角色不存在的錯誤。究竟是一個角色,我如何創建新的角色? – Edmund

+0

@Edmund - 對於簡單的版本,只需將角色想象爲一個用戶即可。如果你真的想深入研究,[文檔](http://www.postgresql.org/docs/9.2/static/user-manag.html)有更長的討論。 –

回答

2

Postgres用戶認證是有點怪。缺省情況是使用與OS相同的身份驗證(至少在Linux中)。因此,要獲得在命令行Postgres的提示,你必須做這樣的事情:

sudo -u postgres psql 

注意,沒有密碼 - 因爲操作系統負責認證的,沒有必要爲一個(在如果需要,OS會要求您提供sudo密碼)。

所以選擇一個就是從你的Rails配置文件中取消密碼選項,並希望一切正常。如果沒有,請通過編輯pg_hba.conf文件(我的/etc/postgresql/9.2/main/pg_hba.conf)將Postgres設置爲接受基於密碼的身份驗證。這裏是我的本地服務器的一個例子。用戶「Postgres的」使用操作系統的認證(「對等」),但用戶「opengeo」使用密碼(「MD5」):

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

希望幫助!

+0

hey xavier。當我鍵入我得到的sudo命令:'sudo:unknown user:postgres'。我記得過去曾經玩過pg_hba文件,但我不記得如何找到它。你能告訴我怎麼才能在我的mac/ – Edmund

+0

@ Edmund - 嗯找到那個文件。聽起來你可能已經改變了默認的用戶名,然後呢?我不知道該在Mac上找到該文件的位置,但它是一個非常獨特的文件名 - 如果您搜索它,應該彈出。 –

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 

要建立DB:

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: 
+0

hey stsd,我認爲你正在做點什麼!但是,當我嘗試時,我收到驗證錯誤。我用底部的錯誤更新了我的答案。請看看並告訴我什麼是錯的! – Edmund

+0

@Edmund,試試這個:'sudo -u postgres createuser -s foo' – tokhi

+0

仍然是同樣的錯誤... sudo:未知用戶:postgres – Edmund

0
development: 
    adapter: postgresql 
    database: postgres 
    username: postgres 
    password: ;ernakulam 
    pool: 5 
    timeout: 5000 

test: 
    adapter: postgresql 
    database: postgres 
    pool: 5 
    timeout: 5000 

production: 
    adapter: postgresql 
    database: postgres 
    pool: 5 
    timeout: 5000` 
相關問題