Migrasi data besar dengan mapping kolom, checkpoint otomatis, dan real-time progress
| Kolom PostgreSQL | Constraints | Sumber Value | Kolom MySQL / Config (boleh nama berbeda) | Transform | Value Map (nilai lama → baru) |
|---|---|---|---|---|---|
| {{ col.pgCol }} Tidak di MySQL | NOT NULL DEFAULT – |
|
≠ nama berbeda: {{ col.mysqlCol }} → {{ col.pgCol }}
Auto NOW() saat insert
Insert NULL
Kolom ini dilewati
|
|
→
|
session_replication_role = 'replica' (butuh user PG superuser).
Jika user bukan superuser, migrasi tetap jalan dengan FK aktif — perhatikan urutan tabel (parent lebih dulu).
| Tabel | Status | Rows Migrated | Last PK | Cek DB (aktual) |
|---|---|---|---|---|
| {{ srcOf(t) }} → {{ dstOf(t) }} | {{ getCheckpointInfo(t).status }} belum ada checkpoint | {{ getCheckpointInfo(t) ? formatNum(getCheckpointInfo(t).total_migrated || 0) : '-' }} | {{ getCheckpointInfo(t) ? (getCheckpointInfo(t).last_pk_value ?? '-') : '-' }} | ✗ {{ dbCheck[t].error }} PG: {{ formatNum(dbCheck[t].pgCount || 0) }} baris, maxPK={{ dbCheck[t].pgMaxPk ?? '-' }} | MySQL: {{ formatNum(dbCheck[t].mysqlCount || 0) }} baris, maxPK={{ dbCheck[t].mysqlMaxPk ?? '-' }} ✓ checkpoint disinkron |
COUNT(*) di tabel target
(sudah termasuk {{ formatNum(totalAdjustedRows) }} baris yang nilai unique-nya di-suffix -id agar tetap masuk).
| MySQL Table | PG Table | Rows Dibaca | Inserted | Di-suffix | Updated (PK ada) | Errors | Status |
|---|---|---|---|---|---|---|---|
| {{ srcOf(tp.table) }} | {{ tp.pgTable }} | {{ formatNum(tp.totalMigrated) }} | {{ formatNum(tp.totalInserted || 0) }} | {{ formatNum(tp.totalAdjusted) }} 0 | {{ formatNum(tp.totalSkipped) }} 0 | {{ tp.errorCount }} 0 | {{ tp.status === 'done' ? '✓ Done' : '⏳ Partial' }} |
| # | Tabel | PK | Error Message |
|---|---|---|---|
| {{ i + 1 }} | {{ srcOf(e.table) }} | {{ e.pk }} | {{ e.error }} |
| MySQL Table | PG Table | Rows Migrated | Errors | Status | |
|---|---|---|---|---|---|
| {{ srcOf(tp.table) }} | {{ tp.pgTable }} | {{ formatNum(tp.totalMigrated) }} | {{ tp.errorCount }} | {{ tp.status === 'done' ? '✓ Done' : '⏳ Partial' }} |
| Tabel MySQL | Status | Last PK Value | Total Migrated | Errors | PK Gagal | Aksi |
|---|---|---|---|---|---|---|
| {{ srcOf(t.table) }} → {{ dstOf(t.table) }} | {{ t.status === 'done' ? '✓ done' : t.status === 'in_progress' ? '⏳ in_progress' : t.status === 'error' ? '✗ error' : '○ pending' }} | {{ t.last_pk_value ?? '-' }} | {{ formatNum(t.total_migrated) }} | {{ t.errors.length }} 0 | {{ formatNum(t.failed_pks.length) }} 0 |
|
|
✏ Edit Checkpoint: {{ t.table }}
ERRORS ({{ t.errors.length }})
PK={{ e.pk }} → {{ e.error }}
|
||||||
| Waktu | Aksi | Detail | Status |
|---|---|---|---|
| {{ formatHistoryTime(h.timestamp) }} | {{ h.action }} | {{ h.detail }} | {{ h.status }} |