From 0a3a5d8749cda01f694a59eca5183f94fe4ce459 Mon Sep 17 00:00:00 2001 From: ZequnZ Date: Wed, 15 Mar 2023 20:44:57 +0100 Subject: [PATCH] add first version --- asset/sql_flyway.webp | Bin 0 -> 41656 bytes core/db_in_docker/Readme.md | 19 +++++++++++++++++ core/db_in_docker/docker-compose.yaml | 20 ++++++++++++++++++ .../src/db_migration/V1__create_table.sql | 5 +++++ 4 files changed, 44 insertions(+) create mode 100644 asset/sql_flyway.webp create mode 100644 core/db_in_docker/Readme.md create mode 100644 core/db_in_docker/docker-compose.yaml create mode 100644 core/db_in_docker/src/db_migration/V1__create_table.sql diff --git a/asset/sql_flyway.webp b/asset/sql_flyway.webp new file mode 100644 index 0000000000000000000000000000000000000000..dd6491a0f3c82ac195ab7ad7889306bb25e23436 GIT binary patch literal 41656 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 AG5`Po literal 0 HcmV?d00001 diff --git a/core/db_in_docker/Readme.md b/core/db_in_docker/Readme.md new file mode 100644 index 0000000..356b6c2 --- /dev/null +++ b/core/db_in_docker/Readme.md @@ -0,0 +1,19 @@ +# Database in docker + +What I would like to achieve here it to have a database in Docker, +also with a supported data migration tool. + +After some research, I choose PostgresSQL as databse and Flyway as data migration tool to achieve this functionality. + +![big](/asset/sql_flyway.webp) + + + +### reference: +[https://www.sqltutorial.org/sql-list-all-tables/](https://www.sqltutorial.org/sql-list-all-tables/) + +[https://blog.devgenius.io/tips-and-tricks-to-using-postgresql-docker-image-80047673c9a5](https://blog.devgenius.io/tips-and-tricks-to-using-postgresql-docker-image-80047673c9a5) + + +TODO: +How to mirgate a csv file into DB? \ No newline at end of file diff --git a/core/db_in_docker/docker-compose.yaml b/core/db_in_docker/docker-compose.yaml new file mode 100644 index 0000000..a56bbab --- /dev/null +++ b/core/db_in_docker/docker-compose.yaml @@ -0,0 +1,20 @@ +services: + + postgres: + restart: always + image: postgres:12.14 + environment: + - POSTGRES_PASSWORD=pwd + ports: + - "0.0.0.0:5432:5432" + command: ["-c", "fsync=false"] + + flyway: + image: boxfuse/flyway:5.2.4 + environment: + - FLYWAY_CONNECT_RETRIES=60 + volumes: + - ./src/db_migration:/flyway/sql/ + depends_on: + - postgres + command: migrate -url=jdbc:postgresql://postgres:5432/postgres -user=postgres -password=pwd -connectRetries=60 diff --git a/core/db_in_docker/src/db_migration/V1__create_table.sql b/core/db_in_docker/src/db_migration/V1__create_table.sql new file mode 100644 index 0000000..85243b8 --- /dev/null +++ b/core/db_in_docker/src/db_migration/V1__create_table.sql @@ -0,0 +1,5 @@ +CREATE TABLE person ( + id serial PRIMARY KEY, + first_name varchar(50), + last_name varchar(50) +);