feat: 레거시 DB 순차 증분 이관 CLI 추가

This commit is contained in:
2026-08-18 12:35:24 +00:00
parent e910a635e6
commit da0e32f422
21 changed files with 1375 additions and 104 deletions
@@ -0,0 +1,29 @@
CREATE TABLE "legacy_import_run" (
"id" BIGSERIAL PRIMARY KEY,
"source_key" TEXT NOT NULL,
"source_fingerprint" CHAR(64) NOT NULL,
"mode" TEXT NOT NULL,
"status" TEXT NOT NULL,
"started_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"finished_at" TIMESTAMPTZ,
"counts" JSONB NOT NULL DEFAULT '{}'::jsonb,
"progress" JSONB NOT NULL DEFAULT '{}'::jsonb,
"error" TEXT,
CONSTRAINT "legacy_import_run_mode_check" CHECK ("mode" IN ('full', 'incremental')),
CONSTRAINT "legacy_import_run_status_check" CHECK ("status" IN ('RUNNING', 'COMPLETED', 'FAILED')),
CONSTRAINT "legacy_import_run_fingerprint_check" CHECK ("source_fingerprint" ~ '^[a-f0-9]{64}$')
);
CREATE INDEX "legacy_import_run_source_started"
ON "legacy_import_run" ("source_key", "started_at" DESC);
CREATE TABLE "legacy_import_checkpoint" (
"source_key" TEXT NOT NULL,
"source_fingerprint" CHAR(64) NOT NULL,
"source_table" TEXT NOT NULL,
"last_legacy_id" BIGINT NOT NULL,
"import_run_id" BIGINT NOT NULL REFERENCES "legacy_import_run" ("id"),
"updated_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY ("source_key", "source_table"),
CONSTRAINT "legacy_import_checkpoint_fingerprint_check" CHECK ("source_fingerprint" ~ '^[a-f0-9]{64}$')
);
@@ -0,0 +1,28 @@
ALTER TABLE "legacy_archive"."import_run"
ADD COLUMN "source_key" TEXT,
ADD COLUMN "source_fingerprint" CHAR(64),
ADD COLUMN "mode" TEXT NOT NULL DEFAULT 'full',
ADD COLUMN "progress" JSONB NOT NULL DEFAULT '{}'::jsonb;
ALTER TABLE "legacy_archive"."import_run"
ADD CONSTRAINT "legacy_archive_import_run_mode_check" CHECK ("mode" IN ('full', 'incremental')),
ADD CONSTRAINT "legacy_archive_import_run_fingerprint_check"
CHECK ("source_fingerprint" IS NULL OR "source_fingerprint" ~ '^[a-f0-9]{64}$');
CREATE INDEX "legacy_archive_import_run_source_started"
ON "legacy_archive"."import_run" ("source_profile", "source_key", "started_at" DESC);
CREATE TABLE "legacy_archive"."import_checkpoint" (
"source_profile" TEXT NOT NULL,
"source_key" TEXT NOT NULL,
"source_fingerprint" CHAR(64) NOT NULL,
"source_table" TEXT NOT NULL,
"last_legacy_id" BIGINT NOT NULL,
"import_run_id" BIGINT NOT NULL REFERENCES "legacy_archive"."import_run" ("id"),
"updated_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY ("source_profile", "source_key", "source_table"),
CONSTRAINT "legacy_archive_import_checkpoint_profile_check"
CHECK ("source_profile" IN ('che', 'kwe', 'pwe', 'twe', 'nya', 'pya', 'hwe')),
CONSTRAINT "legacy_archive_import_checkpoint_fingerprint_check"
CHECK ("source_fingerprint" ~ '^[a-f0-9]{64}$')
);