73

I currently have Ruby on Rails installed via RVM in Ubuntu 12.04. The default database is set up in SQLite3, but I'd like to switch to PostgreSQL for the purposes of pushing to Heroku. How can I accomplish this?

3 Answers 3

169

Here are the steps I've followed:

Install PostgreSQL and development package

$ sudo apt-get install postgresql $ sudo apt-get install libpq-dev 

Set up a user that is the same as my Ubuntu log-in

$ sudo su postgres -c psql postgres=# CREATE ROLE <username> SUPERUSER LOGIN; postgres=# \q 

Modify Gemfile

# Remove gem 'sqlite3' gem 'pg' 

Modify database.yml in app directory

development: adapter: postgresql encoding: unicode database: appname_development pool: 5 timeout: 5000 username: <username> password: test: adapter: postgresql encoding: unicode database: appname_test pool: 5 timeout: 5000 username: <username> password: 

Run bundle install

$ bundle install 

Create databases and migrations

$ rake db:create:all $ rake db:migrate 

Here are the sources I used to help:
http://mrfrosti.com/2011/11/postgresql-for-ruby-on-rails-on-ubuntu/
http://railscasts.com/episodes/342-migrating-to-postgresql
https://devcenter.heroku.com/articles/local-postgresql

Sign up to request clarification or add additional context in comments.

11 Comments

If you want to add a password use this command after running CREATE ROLE: ALTER ROLE <username> WITH PASSWORD '<yourpassword>'; then obviously add your password into database.yml
Alternatively, if you're just creating the role for the first time and want to enter in a password as well: CREATE ROLE <username> SUPERUSER LOGIN PASSWORD '<yourpassword>';
FATAL: Peer authentication failed for user "awesome"
Worked for me. I created my psql user with following command: CREATE ROLE Alex SUPERUSER LOGIN;. In the database.yml I also set my username as Alex and got the same error as jmontross. Then I changed it to alex and everything worked. I also had to run rake db:migrate RAILS_ENV=test. Also note - this method migrates the database from sqlite3 to postgres, but does not migrate the actual data in the database. To migrate it as well, refer to the railscast mentioned in the answer.
2 years later, the only thing that's a bit old from this answer is the postgresql version. Using the command sudo apt-get install postgresql will install the latest available version.
|
6

For all Ubuntu 13.10 users that open this thread follow the steps below to install postresql:

sudo sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main' > /etc/apt/sources.list.d/pgdg.list" wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add - sudo apt-get update sudo apt-get install postgresql-common -t saucy sudo apt-get install postgresql-9.2 libpq-dev 

since there isn't an official Postgres repository for Ubuntu 13.10.

Then create the user as Nick explain (you can specify a password too):

sudo su postgres -c psql postgres=# CREATE ROLE gotqn SUPERUSER LOGIN; postgres=# \password gotqn postgres=# \q 

Note: Replace the gotqn above with whoami result:

enter image description here

The easiest way to create your rails application is to specify you are using postgresql as follows:

rails new Demo -d postgresql 

The code above will automatically add the pg gem in your GemFile and create appropriate database.yml file:

development: adapter: postgresql encoding: unicode database: Demo_development pool: 5 username: gotqn password: mypass 

Note: You need to change the username and to specify the correct password if you have set such.

Then run rake db:create and start the rails server.

Comments

2

sudo sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main' > /etc/apt/sources.list.d/pgdg.list"

wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -

sudo apt-get update

sudo apt-get install postgresql-common

sudo apt-get install postgresql-9.3 libpq-dev

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.