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.