16
votes

What are the steps I need to take to migrate from the default SQLite database to Postgres database?

I'm doing this to get my local development environment as close to my live server (which uses postrgres).

Or is there a reason why local development uses SQLite? Is it not recommended to use Postgres for local development?

4
It just makes for a much "leaner" development environment to keep it on SQLite3, unless you have a reason not to. If you make sure you don't mix up settings.py between dev and release, you should be golden, That's how I do most of my projects. - robotHamster

4 Answers

25
votes

You can try the following steps:

1. Install psycopg2 to configure the database:

pip install psycopg2


2. Inside the default settings.py

Change original values:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

To:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'NAME_OF_DB',
        'USER': 'DB_USER_NAME',
        'PASSWORD': 'DB_PASSWORD',
        'HOST': 'localhost',
        'PORT': 'PORT_NUMBER',
    }
}


3. Migrate the DB:

python manage.py makemigrations
python manage.py migrate


EDIT:

Backup the data first:

python manage.py dumpdata > datadump.json

After changing the DB setting:

python manage.py loaddata datadump.json


What's the best way to migrate a Django DB from SQLite to MySQL?
4
votes

when you are changing the db you maybe get a UNICODEERRO:'utf-8'

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

After wasteing more than 5 days i finally got the solution .. you will never got that accurate error in internet , i figured it out by myself .

python manage.py dumpdata > datadump.json

then change the database settings.py as per your database then

python manage.py makemigrations
python manage.py migrate
python manage.py loaddata datadump.json

and then if u get got the error i mention :

1.Install notepad ++
2.open your datadum.json file in notepad++
3.on buttom right corner you will get the encodin will be anything else than utf-8
4.on top bar select encoding to UTF-8

you are good to go ..then again

python manage.py loaddata datadump.json

i have suffered a lot for this ...so give a thumbs up and shares are appriciated Thank you! and for more clearance you can watch this video :https://youtu.be/RBtEr3TXNwg

3
votes

Here is a great tutorial on how to do this from Django Girls

It shows you the installation as well as the required changes in settings.py.

0
votes

Hope I am not late. So to my experience if you already have data in your sqlite db, you might face some challenges because some fields in sqlite don't directly match with fields in postgres. For example datetime, and boolean fields.

I found a library that helped me to do this:

https://github.com/Hitman23/pgloader

The library does any needed conversions.