diff --git a/bin/migrate-sqlite-to-pg.php b/bin/migrate-sqlite-to-pg.php new file mode 100644 index 0000000..66efdf0 --- /dev/null +++ b/bin/migrate-sqlite-to-pg.php @@ -0,0 +1,46 @@ + PostgreSQL (DATABASE_URL) +// Aufruf im App-Container: php bin/migrate-sqlite-to-pg.php +declare(strict_types=1); + +$sqlitePath = '/data/essens.db'; +$pgUrl = $_SERVER['DATABASE_URL'] ?? getenv('DATABASE_URL'); +if (!$pgUrl) { + fwrite(STDERR, "DATABASE_URL nicht gesetzt\n"); + exit(1); +} + +$sqlite = new PDO('sqlite:' . $sqlitePath); +$sqlite->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + +$pg = new PDO($pgUrl); +$pg->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + +$copy = $pg->beginTransaction(); +try { + $userStmt = $pg->prepare('INSERT INTO essens_user (id, username, email, kc_sub, created_am, updated_am) VALUES (?, ?, ?, ?, ?, ?)'); + $mealStmt = $pg->prepare('INSERT INTO essens_mahlzeiten (id, name, notiz, wochentage, sort_order, status, gegessen_am, erstellt_am, aktualisiert_am) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)'); + + foreach ($sqlite->query('SELECT id, username, email, kc_sub, created_am, updated_am FROM essens_user') as $r) { + $userStmt->execute([$r['id'], $r['username'], $r['email'], $r['kc_sub'] ?: null, $r['created_am'] ?: null, $r['updated_am'] ?: null]); + } + foreach ($sqlite->query('SELECT id, name, notiz, wochentage, sort_order, status, gegessen_am, erstellt_am, aktualisiert_am FROM essens_mahlzeiten') as $r) { + $mealStmt->execute([ + $r['id'], $r['name'], $r['notiz'] ?: null, + $r['wochentage'] ?: null, + (int) $r['sort_order'], $r['status'], + $r['gegessen_am'] ?: null, $r['erstellt_am'] ?: null, $r['aktualisiert_am'] ?: null, + ]); + } + + $pg->exec("SELECT setval('essens_user_id_seq', COALESCE(MAX(id), 0) + 1, false) FROM essens_user"); + $pg->exec("SELECT setval('essens_mahlzeiten_id_seq', COALESCE(MAX(id), 0) + 1, false) FROM essens_mahlzeiten"); + $copy->commit(); +} catch (Throwable $e) { + $copy->rollBack(); + throw $e; +} + +$u = $pg->query('SELECT count(*) FROM essens_user')->fetchColumn(); +$m = $pg->query('SELECT count(*) FROM essens_mahlzeiten')->fetchColumn(); +echo "Import ok: $u User, $m Mahlzeiten\n";