# Docker: Migrate from PostgreSQL 14 to 15 This guide describes how to migrate from PostgreSQL 14 to 15, since migrating through docker is a bit of a chore. This guide also assumes that you are using docker and the provided `docker-compose.yml` files defaults for postgres. This guide can also be helpful if you want to migrate your postgres data to a new server. You will have to skip some steps like changing around the `docker-compose.yml` file, and just focus on the backup and restore steps. ## Is this needed? This is optional, though it is highly recomended to run the latest version. If you do not want to go through the hassle of upgrading from 14 to 15, be assured that PostgreSQL 14 is still supported until November 12th, 2026. For more information see the [PostgreSQL release policy](https://www.postgresql.org/support/versioning/) If you choose to continue using 14, you should update it every so often to make sure you are up to date with security patches ## Backup Make sure the container is running before you do this! Make sure to make a backup, using the `pg_dumpall` command! ```bash docker compose exec postgres pg_dumpall -U postgres > backup ``` ## Delete Existing Volumes This will delete all data in the database, so make sure you have a backup from the previous step! Make sure to stop the container before you do this, or you will receieve an error. ```bash docker compose down ``` ### Find the Volume's Name The volume's name will be like this: `(the directory zipline is in)_pg_data`, for example if the directory Zipline is in is called `zipline`, the volume name will be `zipline_pg_data`. Run the following command, to verify that the volume name is correct: ```bash docker volume ls ``` ### Delete the Volume ```bash docker volume rm (volume name) ``` ## Change the Version to 15 In the `docker-compose.yml` file, find the `postgres` section, and under the `image` property, you might see either `postgres` or `postgres:14`. Replace this with `postgres:15`. ```yaml version: '3' services: postgres: image: postgres:15 restart: always ``` ### Pull the New Image Once you have changed the version, you need to pull the new image. This step is optional as Docker Compose will pull the image automatically when you start the container, but it is recommended to do this step to make sure you have the latest version if you have pulled the image before. ```bash docker compose pull ``` ## Start the Postgres container Make sure you start the postgres container, and leave the zipline container stopped. If the Zipline container starts, it will try to run migrations, and the backup step will fail. You will have to restart this entire process if you start the Zipline container before the Postgres container. ```bash docker compose up -d postgres ``` ## Restore Backup Before doing anything, make sure to restore the backup! This will restore all the data from the previous version, from your [stored backup dump file](#backup). ```bash docker compose exec -T postgres psql -U postgres < backup ``` ## Start Zipline Now you can start the Zipline container, and it will run the migrations for you. ```bash docker compose up -d zipline ```