Try Flyway DB version control with Docker PostgreSQL in 3 steps

tanut aran
2 min readApr 5, 2021

--

Flyway is SQL-based database version control

Step 1: Spin up Docker PostgreSQL

Start up with basic docker-compose.yml to spin up Postgres

my-postgres:
image: postgres
ports:
5555:5432
environment:
POSTGRES_USER: example
POSTGRES_PASSWORD: example

I map 5432 to 5555 since I already have a db running at 5432 .

docker-compose up

Step 2: Flyway config

Flyway need to know where is the database and user to login so you going to add url , user and pass to it.

Create flyway.conf

flyway.url=jdbc:postgresql://localhost:5555/example
flyway.user=example
flyway.password=example
flyway.locations=filesystem:./

I also add migration script location to be this location.

Test running the flyway by

flyway info

should got message like this

Flyway Community Edition 7.7.0 by Redgate
Database: jdbc:postgresql://localhost:5555/example (PostgreSQL 13.2)
...

Step 3: Flyway first migration

Then you create a ‘migration’ file in sql

The convention is VXXX__your-file-name.sql where XXX is flexible

checkout their docs for this.

For our case, I just create

-- filename: V1__create-accounts.sql
CREATE TABLE accounts (
user_id serial PRIMARY KEY,
username VARCHAR ( 50 ) UNIQUE NOT NULL,
password VARCHAR ( 50 ) NOT NULL,
email VARCHAR ( 255 ) UNIQUE NOT NULL,
created_on TIMESTAMP NOT NULL,
last_login TIMESTAMP
);

Then I run it with

flyway migrate

Here we go we have the migrated table and the flyway_schema_history to track the database migration version

example=# \dt
public | accounts | table | example
public | flyway_schema_history | table | example

Unfortunately …

when I run flyway undo

ERROR: Flyway Teams Edition upgrade required: undo is not supported by Flyway Community Edition.

I think this is basic operation I need.

So I finish my trial here and will checkout sqitch if they have this options.

Hope this help!

--

--

tanut aran
tanut aran

Written by tanut aran

Co-founder and Coder at work !

No responses yet