Migration verification report
Chinook · SQLite → PostgreSQL 18.3
Checked 2026-09-25 16:51 (UTC+0800) · in 0.42 s
11Tables
15,607Rows
11/11Checksums
11/11Foreign keys
2.18 sMigration
Structure
- Foreign keys created11 / 11
- Indexes created10 / 10
- Foreign keys validated on every row11 / 11
- Key sequences above current max (new inserts won't collide)10 / 10
Data by table
TableSourcePostgreSQLChecksumStatus
Album34734704418092ae4f347 → 347 · 04418092ae4fmatch
| Column | Type | Nulls | Value check | |
|---|---|---|---|---|
AlbumId | INTEGER → integer | 0 | sum 60378 | ✓ |
Title | NVARCHAR(160) → varchar(160) | 0 | 7874 chars | ✓ |
ArtistId | INTEGER → integer | 0 | sum 42314 | ✓ |
Artist275275210ce975edcb275 → 275 · 210ce975edcbmatch
| Column | Type | Nulls | Value check | |
|---|---|---|---|---|
ArtistId | INTEGER → integer | 0 | sum 37950 | ✓ |
Name | NVARCHAR(120) → varchar(120) | 0 | 5658 chars | ✓ |
Customer5959f9d7f48e9e9559 → 59 · f9d7f48e9e95match
| Column | Type | Nulls | Value check | |
|---|---|---|---|---|
CustomerId | INTEGER → integer | 0 | sum 1770 | ✓ |
FirstName | NVARCHAR(40) → varchar(40) | 0 | 340 chars | ✓ |
LastName | NVARCHAR(20) → varchar(20) | 0 | 409 chars | ✓ |
Company | NVARCHAR(80) → varchar(80) | 49 | 166 chars | ✓ |
Address | NVARCHAR(70) → varchar(70) | 0 | 1055 chars | ✓ |
City | NVARCHAR(40) → varchar(40) | 0 | 460 chars | ✓ |
State | NVARCHAR(40) → varchar(40) | 29 | 65 chars | ✓ |
Country | NVARCHAR(40) → varchar(40) | 0 | 375 chars | ✓ |
PostalCode | NVARCHAR(10) → varchar(10) | 4 | 332 chars | ✓ |
Phone | NVARCHAR(24) → varchar(24) | 1 | 973 chars | ✓ |
Fax | NVARCHAR(24) → varchar(24) | 47 | 208 chars | ✓ |
Email | NVARCHAR(60) → varchar(60) | 0 | 1240 chars | ✓ |
SupportRepId | INTEGER → integer | 0 | sum 233 | ✓ |
Employee887a0a8d424b128 → 8 · 7a0a8d424b12match
| Column | Type | Nulls | Value check | |
|---|---|---|---|---|
EmployeeId | INTEGER → integer | 0 | sum 36 | ✓ |
LastName | NVARCHAR(20) → varchar(20) | 0 | 50 chars | ✓ |
FirstName | NVARCHAR(20) → varchar(20) | 0 | 46 chars | ✓ |
Title | NVARCHAR(30) → varchar(30) | 0 | 111 chars | ✓ |
ReportsTo | INTEGER → integer | 1 | sum 20 | ✓ |
BirthDate | DATETIME → timestamp | 0 | 1947-09-19 … 1973-08-29 | ✓ |
HireDate | DATETIME → timestamp | 0 | 2002-04-01 … 2004-03-04 | ✓ |
Address | NVARCHAR(70) → varchar(70) | 0 | 130 chars | ✓ |
City | NVARCHAR(40) → varchar(40) | 0 | 63 chars | ✓ |
State | NVARCHAR(40) → varchar(40) | 0 | 16 chars | ✓ |
Country | NVARCHAR(40) → varchar(40) | 0 | 48 chars | ✓ |
PostalCode | NVARCHAR(10) → varchar(10) | 0 | 56 chars | ✓ |
Phone | NVARCHAR(24) → varchar(24) | 0 | 135 chars | ✓ |
Fax | NVARCHAR(24) → varchar(24) | 0 | 135 chars | ✓ |
Email | NVARCHAR(60) → varchar(60) | 0 | 174 chars | ✓ |
Genre252566e027ddd8f225 → 25 · 66e027ddd8f2match
| Column | Type | Nulls | Value check | |
|---|---|---|---|---|
GenreId | INTEGER → integer | 0 | sum 325 | ✓ |
Name | NVARCHAR(120) → varchar(120) | 0 | 224 chars | ✓ |
Invoice412412b690d0644c4c412 → 412 · b690d0644c4cmatch
| Column | Type | Nulls | Value check | |
|---|---|---|---|---|
InvoiceId | INTEGER → integer | 0 | sum 85078 | ✓ |
CustomerId | INTEGER → integer | 0 | sum 12331 | ✓ |
InvoiceDate | DATETIME → timestamp | 0 | 2009-01-01 … 2013-12-22 | ✓ |
BillingAddress | NVARCHAR(70) → varchar(70) | 0 | 7368 chars | ✓ |
BillingCity | NVARCHAR(40) → varchar(40) | 0 | 3211 chars | ✓ |
BillingState | NVARCHAR(40) → varchar(40) | 202 | 455 chars | ✓ |
BillingCountry | NVARCHAR(40) → varchar(40) | 0 | 2620 chars | ✓ |
BillingPostalCode | NVARCHAR(10) → varchar(10) | 28 | 2318 chars | ✓ |
Total | NUMERIC(10,2) → numeric(10,2) | 0 | sum 2328.60 | ✓ |
InvoiceLine2,2402,240c5ccb30fb50e2,240 → 2,240 · c5ccb30fb50ematch
| Column | Type | Nulls | Value check | |
|---|---|---|---|---|
InvoiceLineId | INTEGER → integer | 0 | sum 2509920 | ✓ |
InvoiceId | INTEGER → integer | 0 | sum 463386 | ✓ |
TrackId | INTEGER → integer | 0 | sum 3847725 | ✓ |
UnitPrice | NUMERIC(10,2) → numeric(10,2) | 0 | sum 2328.60 | ✓ |
Quantity | INTEGER → integer | 0 | sum 2240 | ✓ |
MediaType5544afcd4cd4995 → 5 · 44afcd4cd499match
| Column | Type | Nulls | Value check | |
|---|---|---|---|---|
MediaTypeId | INTEGER → integer | 0 | sum 15 | ✓ |
Name | NVARCHAR(120) → varchar(120) | 0 | 104 chars | ✓ |
Playlist1818523d94348c2918 → 18 · 523d94348c29match
| Column | Type | Nulls | Value check | |
|---|---|---|---|---|
PlaylistId | INTEGER → integer | 0 | sum 171 | ✓ |
Name | NVARCHAR(120) → varchar(120) | 0 | 217 chars | ✓ |
PlaylistTrack8,7158,71549878b305cd68,715 → 8,715 · 49878b305cd6match
| Column | Type | Nulls | Value check | |
|---|---|---|---|---|
PlaylistId | INTEGER → integer | 0 | sum 42852 | ✓ |
TrackId | INTEGER → integer | 0 | sum 15400117 | ✓ |
Track3,5033,50325bf4c35f5983,503 → 3,503 · 25bf4c35f598match
| Column | Type | Nulls | Value check | |
|---|---|---|---|---|
TrackId | INTEGER → integer | 0 | sum 6137256 | ✓ |
Name | NVARCHAR(200) → varchar(200) | 0 | 55639 chars | ✓ |
AlbumId | INTEGER → integer | 0 | sum 493676 | ✓ |
MediaTypeId | INTEGER → integer | 0 | sum 4233 | ✓ |
GenreId | INTEGER → integer | 0 | sum 20056 | ✓ |
Composer | NVARCHAR(220) → varchar(220) | 978 | 62081 chars | ✓ |
Milliseconds | INTEGER → integer | 0 | sum 1378778040 | ✓ |
Bytes | INTEGER → integer | 0 | sum 117386255350 | ✓ |
UnitPrice | NUMERIC(10,2) → numeric(10,2) | 0 | sum 3680.97 | ✓ |
How it was checked
- Every row of every table was read from both databases in primary-key order.
- Values were normalised the same way (numbers to the column scale, timestamps to microseconds, binary to hex) and hashed into a per-table MD5 checksum. Equal checksums mean every value is equal.
- Per column: null count, numeric sum, text length and date range — so any mismatch is located instantly.
- Structure was checked too: foreign keys (validated by PostgreSQL on every row), indexes and key sequences.