ADCM migration

Contents

ADCM includes tools for data migration from SQlite to PostgreSQL. This functionality is supported from the version 2023.03.27.20 onwards. The functionality is useful if you have upgraded ADCM to the newest version and want to start using PostgreSQL.

In order to migrate from a source SQlite database to a target PostgreSQL database, you must fully prepare the target PostgreSQL database first.

Migration

After you have updated the ADCM docker container to the newest version, you can migrate from SQLite to PostgreSQL via the following commands:

  1. Dump the SQLite database to a file:

    $ docker exec -it adcm /adcm/python/manage.py dumpdata --natural-foreign --natural-primary -o /adcm/data/var/data.json

    -o specifies the file path.

    Essentially, this command requests all data from the SQlite database, then creates a JSON representation of that data, and places it to the specified file system location as a data.json file.

  2. Stop the ADCM container:

    $ docker stop adcm
    $ docker rm adcm
  3. Start the ADCM container in MIGRATION_MODE:

    $ docker run -d --restart=always -p 8000:8000 -v /opt/adcm:/adcm/data
    -e DB_HOST="<DATABASE_HOSTNAME_OR_IP_ADDRESS>" -e DB_PORT="<DATABASE_TCP_PORT>"
    -e DB_USER="<DATABASE_USERNAME>" -e DB_NAME="<DATABASE_NAME>"
    -e DB_PASS="<DATABASE_USER_PASSWORD>" -e MIGRATION_MODE=1
    --name adcm hub.arenadata.io/adcm/adcm:<version>

    where <version> is a desired ADCM image version in one of the following formats:

    • <major>.<minor>.<patch> — if you need a specific ADCM patch. For example, 2.0.0.

    • <major>.<minor> — if you need the last patch within the selected ADCM version. For example, 2.0.

    Note that before ADCM 2.0.0, the following format was used for versioning: YYYY.MM.DD.HH.

    For SELinux, use -v /opt/adcm:/adcm/data:Z.

    Starting the ADCM container like this, you obtain an empty ADCM instance that has not yet been filled with data.

  4. Load the data from a file to the PostgreSQL database:

    $ docker exec -it adcm /adcm/python/manage.py loaddata /adcm/data/var/data.json
  5. Stop the ADCM container:

    $ docker stop adcm
    $ docker rm adcm
  6. Start the ADCM container:

    $ docker run -d --restart=always -p 8000:8000 -v /opt/adcm:/adcm/data
    -e DB_HOST="<DATABASE_HOSTNAME_OR_IP_ADDRESS>" -e DB_PORT="<DATABASE_TCP_PORT>"
    -e DB_USER="<DATABASE_USERNAME>" -e DB_NAME="<DATABASE_NAME>"
    -e DB_PASS="<DATABASE_USER_PASSWORD>" -e MIGRATION_MODE=0
    --name adcm hub.arenadata.io/adcm/adcm:<version>
Found a mistake? Seleсt text and press Ctrl+Enter to report it