|
6 | 6 | -- Add new columns for official metadata and core identifiers |
7 | 7 | ALTER TABLE servers ADD COLUMN server_name VARCHAR(255); |
8 | 8 | ALTER TABLE servers ADD COLUMN version VARCHAR(255); |
9 | | -ALTER TABLE servers ADD COLUMN status VARCHAR(50); |
| 9 | +ALTER TABLE servers ADD COLUMN status VARCHAR(50) DEFAULT 'active'; |
10 | 10 | ALTER TABLE servers ADD COLUMN published_at TIMESTAMP WITH TIME ZONE; |
11 | 11 | ALTER TABLE servers ADD COLUMN updated_at TIMESTAMP WITH TIME ZONE; |
12 | 12 | ALTER TABLE servers ADD COLUMN is_latest BOOLEAN; |
|
38 | 38 | -- Note: status is at top level in old format, not in official_meta |
39 | 39 | UPDATE servers |
40 | 40 | SET |
41 | | - status = COALESCE(NULLIF(NULLIF(rec.value->>'status', 'null'), ''), 'active'), |
| 41 | + status = rec.value->>'status', |
42 | 42 | published_at = COALESCE((official_meta->>'publishedAt')::TIMESTAMP WITH TIME ZONE, NOW()), |
43 | 43 | updated_at = (official_meta->>'updatedAt')::TIMESTAMP WITH TIME ZONE, |
44 | 44 | is_latest = COALESCE((official_meta->>'isLatest')::BOOLEAN, true) |
|
47 | 47 | -- Handle records without official metadata (set defaults) |
48 | 48 | UPDATE servers |
49 | 49 | SET |
50 | | - status = COALESCE(NULLIF(NULLIF(rec.value->>'status', 'null'), ''), 'active'), |
| 50 | + status = rec.value->>'status', |
51 | 51 | published_at = NOW(), |
52 | 52 | updated_at = NOW(), |
53 | 53 | is_latest = true |
@@ -82,11 +82,14 @@ SELECT migrate_official_metadata(); |
82 | 82 | -- Drop the migration function |
83 | 83 | DROP FUNCTION migrate_official_metadata(); |
84 | 84 |
|
85 | | --- Safety check: Update any remaining NULL values with defaults before adding NOT NULL constraints |
86 | | --- Also normalize any invalid status values to ensure check constraint will pass |
| 85 | +-- Safety check: Normalize invalid status values before adding NOT NULL constraints |
| 86 | +-- This handles: NULL (missing field), empty string, string "null", and any invalid values |
87 | 87 | UPDATE servers |
88 | 88 | SET status = 'active' |
89 | | -WHERE status IS NULL OR status NOT IN ('active', 'deprecated', 'deleted'); |
| 89 | +WHERE status IS NULL |
| 90 | + OR status = '' |
| 91 | + OR status = 'null' |
| 92 | + OR status NOT IN ('active', 'deprecated', 'deleted'); |
90 | 93 |
|
91 | 94 | UPDATE servers SET published_at = NOW() WHERE published_at IS NULL; |
92 | 95 |
|
|
0 commit comments