Migración del proyecto de Django de sqlite a Postgresql

Migración de Sqlite a Postgresql

Descripción: Migración a Postgresql

Copia de datos de sqlite

# hacemos una copia de los datos de sqlite
# creamos antes el directorio backups si no está creado.
$ python manage.py dumpdata -o backups/datosbiblioteca.json

Instalación y configuración de docker y docker-compose

Si trabajamos en linux o mac lo hacemos directametne en la mmáquina. Si trabajamos en Windows, usamos la máquina virtualbox que tenemos creada.

Instalación de docker

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ DRY_RUN=1 sh ./get-docker.sh

# post instalación
$ sudo groupadd docker
$ sudo usermod -aG docker $USER
$ newgrp docker 

Podemos comprobar que ha funcionado bien

$ docker run hello-world

Instalación de docker-compose

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

Podemos comprobar que ha funcionado bien

$ docker-compose --version

Instalación del servico de postgresql

Este servicio lo instalamos en linux o en la máquina virtualbox si usas windows

En una carpeta de este linux creamos el siguiente archivo con los serviciios de postgresql y adminer.

# docker-compose.yml
version: '3.1'

services:
  db:
    image: postgres:13.0-alpine
    environment:
      - POSTGRES_USER=django
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=biblioteca
    volumes:
      - ./postgres_data:/var/lib/postgresql/data/
    ports:
      - 5432:5432

  adminer:
    image: adminer
    ports:
      - 8080:8080

En esa misma carpeta ejecutamos:

$ docker-compose up -d

Y accedmos a la url del adminer: http://localhost:8080 (o la ip de la máquina virtual si la estaś usando).

Podrás conectar con la base de datos seleccionando postgresql y el resto de datos.

Configuración de la nueva base de datos en django

Como vamos a usar postgresql debemos instalar el cliente de python para postgresql en nuestra máquina.

$ pip install psycopg2-binary

Y configuramos el archivo settings.py para que use postgresql.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'biblioteca',
        'USER': 'django',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

Si usas virutalbox tienes que poner la ip de virtualbox en el host.

Creación de la estructura de la base de datos (migraciones)

$ python manage.py migrate

Carga de los datos antiguos de sqlite

$ python manage.py loaddata backups/datosbiblioteca.json

Y comprobamos que todo ha ido bien. Deberíamos de tener nuestro proyecto django ejecutándose con la nueva base de datos postgresql. Recordad que el servidor de docker de postgresql tiene que estar ejecutándose.

Mejoras

  • Usar variables de entorno en docker-compose.yml y en settings.py
  • Puedes usar un fichero .env para configurar las variables de entorno.
Última modificación October 21, 2022: inicio django (f6c0691)