サーバーサイド Kotlin のプロジェクトで、
複数の PostgreSQL スキーマで開発するために検証したことのメモです。

検証用なのでコードの細かいとこは雑です。
他のやり方もあると思うので対応例の1つです。

検証に使ったコード

akkinoc/try-flyway-with-postgres-multi-schemas - GitHub

PostgreSQL の Docker コンテナを複数スキーマがある状態で起動するには?

スキーマ作成する初期化スクリプト (/docker-entrypoint-initdb.d) をマウントすれば良い。

# docker-compose.yml
services:
  postgres:
    image: postgres:15.12-alpine
    environment:
      POSTGRES_USER: akkinoc
      POSTGRES_PASSWORD: akkinoc-pw
      POSTGRES_DB: akkinoc-db
    ports:
      - 15432:5432
    volumes:
      - ./postgres/init:/docker-entrypoint-initdb.d  # ここに仕込む
-- postgres/init/create-schemas.sql
CREATE SCHEMA schema1;
CREATE SCHEMA schema2;
CREATE SCHEMA schema3;
# PostgreSQL 起動
docker compose -f ./docker/docker-compose.yml up

Flyway によるマイグレーションを Gradle でスキーマ別に管理するには?

スキーマの数だけ Gradle モジュールを作れば良い。

// build.gradle.kts
plugins {
    kotlin("jvm") version "1.9.25"
    id("org.flywaydb.flyway") version "10.20.1"
}
buildscript {
    dependencies {
        classpath("org.flywaydb:flyway-database-postgresql:10.20.1")
    }
}
dependencies {
    compileOnly("org.postgresql:postgresql:42.7.5")
}
flyway {
    url = "jdbc:postgresql://localhost:15432/akkinoc-db"
    user = "akkinoc"
    password = "akkinoc-pw"
    defaultSchema = "schema1"  // ここでスキーマを指定
    cleanDisabled = false
}
# マイグレーション実行
gradle flywayClean flywayMigrate flywayInfo

jOOQ で DB アクセス用コードを Gradle でスキーマ別に生成するには?

Server Side Kotlin から DB アクセスには jOOQ を使う場合のコード生成。
スキーマの数だけ Gradle モジュールに設定を仕込めば良い。
スキーマの情報も生成されたコードに含まれている。

// build.gradle.kts
plugins {
    kotlin("jvm") version "1.9.25"
    id("org.flywaydb.flyway") version "10.20.1"
    id("org.jooq.jooq-codegen-gradle") version "3.19.21"
}
buildscript {
    dependencies {
        classpath("org.flywaydb:flyway-database-postgresql:10.20.1")
    }
}
dependencies {
    compileOnly("org.postgresql:postgresql:42.7.5")
    jooqCodegen("org.postgresql:postgresql:42.7.5")
}
flyway {
    url = "jdbc:postgresql://localhost:15432/akkinoc-db"
    user = "akkinoc"
    password = "akkinoc-pw"
    defaultSchema = "schema1"
    cleanDisabled = false
}
jooq {
    configuration {
        jdbc {
            url = "jdbc:postgresql://localhost:15432/akkinoc-db"
            user = "akkinoc"
            password = "akkinoc-pw"
        }
        generator {
            name = "org.jooq.codegen.KotlinGenerator"
            database {
                name = "org.jooq.meta.postgres.PostgresDatabase"
                inputSchema = "schema1"  // ここでスキーマを指定
                includes = ".*"
                excludes = "flyway_schema_history"
            }
            target {
                packageName = "dev.akkinoc.try_flyway_with_postgres_multi_schemas.schema1"
                directory = "src/main/kotlin"
            }
        }
    }
}
# jOOQ コード生成
gradle jooqCodegen

tbls doc で複数スキーマの ER 図を作るには?

tbls は ER 図をリバース生成できるツール。
複数スキーマに対応されているので、普通に使うだけで良い。
スキーマ指定しなくても全スキーマ分が生成される。

# ER 図を生成
tbls doc postgresql://akkinoc:akkinoc-pw@localhost:15432/akkinoc-db?sslmode=disable