freshyo/packages/migrator/LOCAL_D1_IMPORT.md
2026-03-30 21:59:23 +05:30

96 lines
2.2 KiB
Markdown

# Local D1 Import (FKs preserved, temporarily disabled)
This guide migrates Postgres -> local D1 while keeping FK definitions and disabling enforcement during import.
## 1) Run Postgres -> SQLite migrator
Ensure schema is `mf` in `packages/migrator/src/config.ts`, then run the migrator to produce:
- `packages/migrator/data/migrated.db`
- `apps/backend/migrated.sql`
Command:
```
cd packages/migrator
npm run migrate:pg-to-sqlite
```
## Dump SQLite DB to SQL
Command:
```
sqlite3 packages/migrator/data/migrated.db ".output apps/backend/migrated.sql" ".dump" ".exit"
```
## 2) Wrap SQL dump to disable FK during inserts
Create `apps/backend/migrated_with_fk_disabled.sql`:
```sql
PRAGMA foreign_keys = OFF;
BEGIN;
-- contents of migrated.sql go here
COMMIT;
PRAGMA foreign_keys = ON;
PRAGMA foreign_key_check;
```
Command (macOS/Linux):
```
cd /Users/mohammedshafiuddin/WebDev/freshyo
{
echo "PRAGMA foreign_keys = OFF;";
echo "BEGIN;";
cat apps/backend/migrated.sql;
echo "COMMIT;";
echo "PRAGMA foreign_keys = ON;";
echo "PRAGMA foreign_key_check;";
} > apps/backend/migrated_with_fk_disabled.sql
```
## 3) Reset local D1 (Miniflare)
Delete local D1 sqlite files:
`apps/backend/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/*.sqlite*`
Command:
```
rm -f apps/backend/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/*.sqlite*
```
Alternative (clean local D1 using wrangler):
```
wrangler d1 execute freshyo-dev --command "DROP TABLE IF EXISTS \"__drizzle_migrations\";"
```
Initialize empty local D1 file:
```
wrangler d1 execute freshyo-dev --command "SELECT 1;"
```
## 4) Import into local D1
```
wrangler d1 execute freshyo-dev --file apps/backend/migrated_with_fk_disabled.sql
```
## 5) Verify
Run:
```sql
PRAGMA foreign_key_check;
```
Command:
```
wrangler d1 execute freshyo-dev --command "PRAGMA foreign_key_check;"
```
## 6) Spot-check counts
```sql
SELECT count(*) FROM product_info;
SELECT count(*) FROM orders;
SELECT count(*) FROM delivery_slot_info;
```
Command:
```
wrangler d1 execute freshyo-dev --command "SELECT count(*) FROM product_info;"
wrangler d1 execute freshyo-dev --command "SELECT count(*) FROM orders;"
wrangler d1 execute freshyo-dev --command "SELECT count(*) FROM delivery_slot_info;"
```