Let’s create a new Rails app.
rails new sample
Our database.yml contains configuration specific to sqlite3
because rails creates the application with sqlite3 as the default database.
Now if we want to change our database
from sqlite3 to PostgreSQL
or any other database.
Then, we have to manually modify our database.yml
to add PostgreSQL related configuration.
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
<<: *default
database: sample_development
test:
<<: *default
database: sample_test
production:
<<: *default
database: sample_production
username: sample
password: <%= ENV['SAMPLE_DATABASE_PASSWORD'] %>
And along with this, we also need to remove sqlite3 adapter and add pg gem to our Gemfile.
gem 'pg'
Now we need to run bundle install to install the pg adapter.
To automate this process,
Rails 6 has added
rails db:system:change command.
It takes one argument to which specifies the database type.
For example, if we want to change our database to PostgreSQL then to will be postgresql.
This command will automatically update our database.yml
and Gemfile for the adapter based on the to option provided.
Let’s say, if we want to change the database to PostgreSQL then we need to run following command:
>rails db:system:change --to=postgresql
conflict config/database.yml
Overwrite /Users/romil/Desktop/work/sample/config/database.yml? (enter "h" for help) [Ynaqdhm] Y
force config/database.yml
gsub Gemfile
gsub Gemfile
Now the only thing we need to do is run bundle install and we are all set.
